57 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			57 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
|   | // Copyright 2019 The go-ethereum Authors | ||
|  | // This file is part of the go-ethereum library. | ||
|  | // | ||
|  | // The go-ethereum library is free software: you can redistribute it and/or modify | ||
|  | // it under the terms of the GNU Lesser General Public License as published by | ||
|  | // the Free Software Foundation, either version 3 of the License, or | ||
|  | // (at your option) any later version. | ||
|  | // | ||
|  | // The go-ethereum library is distributed in the hope that it will be useful, | ||
|  | // but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
|  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
|  | // GNU Lesser General Public License for more details. | ||
|  | // | ||
|  | // You should have received a copy of the GNU Lesser General Public License | ||
|  | // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. | ||
|  | 
 | ||
|  | /* | ||
|  | Package localstore provides disk storage layer for Swarm Chunk persistence. | ||
|  | It uses swarm/shed abstractions on top of github.com/syndtr/goleveldb LevelDB | ||
|  | implementation. | ||
|  | 
 | ||
|  | The main type is DB which manages the storage by providing methods to | ||
|  | access and add Chunks and to manage their status. | ||
|  | 
 | ||
|  | Modes are abstractions that do specific changes to Chunks. There are three | ||
|  | mode types: | ||
|  | 
 | ||
|  |  - ModeGet, for Chunk access | ||
|  |  - ModePut, for adding Chunks to the database | ||
|  |  - ModeSet, for changing Chunk statuses | ||
|  | 
 | ||
|  | Every mode type has a corresponding type (Getter, Putter and Setter) | ||
|  | that provides adequate method to perform the opperation and that type | ||
|  | should be injected into localstore consumers instead the whole DB. | ||
|  | This provides more clear insight which operations consumer is performing | ||
|  | on the database. | ||
|  | 
 | ||
|  | Getters, Putters and Setters accept different get, put and set modes | ||
|  | to perform different actions. For example, ModeGet has two different | ||
|  | variables ModeGetRequest and ModeGetSync and two different Getters | ||
|  | can be constructed with them that are used when the chunk is requested | ||
|  | or when the chunk is synced as this two events are differently changing | ||
|  | the database. | ||
|  | 
 | ||
|  | Subscription methods are implemented for a specific purpose of | ||
|  | continuous iterations over Chunks that should be provided to | ||
|  | Push and Pull syncing. | ||
|  | 
 | ||
|  | DB implements an internal garbage collector that removes only synced | ||
|  | Chunks from the database based on their most recent access time. | ||
|  | 
 | ||
|  | Internally, DB stores Chunk data and any required information, such as | ||
|  | store and access timestamps in different shed indexes that can be | ||
|  | iterated on by garbage collector or subscriptions. | ||
|  | */ | ||
|  | package localstore |