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
							 |