Skip to content

Commit

Permalink
Add mr plow file db type
Browse files Browse the repository at this point in the history
  • Loading branch information
fireduck64 committed Dec 31, 2020
1 parent 4801bdf commit 1cac13d
Show file tree
Hide file tree
Showing 8 changed files with 143 additions and 1 deletion.
1 change: 1 addition & 0 deletions RELEASE-NOTES.md
@@ -1,6 +1,7 @@
## master

* Update to bouncy-castle 1.68
* Added database type "atomic_file" for use with MrPlow

## 1.8.0

Expand Down
11 changes: 11 additions & 0 deletions lib/BUILD
Expand Up @@ -36,6 +36,17 @@ java_library(
],
)

java_library(
name = "atomicfiledb",
srcs = glob(["src/db/atomicfile/*.java"]),
deps = [
":lib",
"//protolib:protogrpc",
"@duckutil//:duckutil_lib",
"@maven//:junit_junit"
],
)



java_test(
Expand Down
2 changes: 1 addition & 1 deletion lib/src/db/DBProvider.java
Expand Up @@ -5,7 +5,7 @@

public abstract class DBProvider
{
private static final Logger logger = Logger.getLogger("snowblossom.db");
protected static final Logger logger = Logger.getLogger("snowblossom.db");

protected Config config;

Expand Down
41 changes: 41 additions & 0 deletions lib/src/db/atomicfile/AtomicFileDB.java
@@ -0,0 +1,41 @@
package snowblossom.lib.db.atomicfile;

import duckutil.Config;
import java.io.File;
import java.util.logging.Logger;
import snowblossom.lib.db.DBMap;
import snowblossom.lib.db.DBMapMutationSet;
import snowblossom.lib.db.DBProvider;

public class AtomicFileDB extends DBProvider
{
private final File base;

public AtomicFileDB(Config config)
throws Exception
{
super(config);
config.require("db_path");

String path = config.get("db_path");

base = new File(path);
base.mkdirs();

logger.info(String.format("Loading AtomicFileDB with path %s", path));

}

@Override
public DBMapMutationSet openMutationMapSet(String name) throws Exception
{
throw new Exception("NOT IMPLEMENTED");
}

@Override
public DBMap openMap(String name) throws Exception
{
return new AtomicFileMap(new File(base, name));
}

}
82 changes: 82 additions & 0 deletions lib/src/db/atomicfile/AtomicFileMap.java
@@ -0,0 +1,82 @@
package snowblossom.lib.db.atomicfile;

import com.google.protobuf.ByteString;
import duckutil.AtomicFileOutputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import snowblossom.lib.HexUtil;
import snowblossom.lib.db.DBMap;

public class AtomicFileMap extends DBMap
{
private final File base;

public AtomicFileMap(File base)
{
this.base = base;
}

@Override
public void put(ByteString key, ByteString value)
{
base.mkdirs();

File f = getFileForKey(key);

try
{
AtomicFileOutputStream a_out = new AtomicFileOutputStream(f);
a_out.write(value.toByteArray());
a_out.flush();
a_out.close();
}
catch(java.io.IOException e)
{
throw new RuntimeException(e);
}


}


@Override
public ByteString get(ByteString key)
{
File f = getFileForKey(key);
if (!f.exists())
{
return null;
}

if (f.length() > 1e9)
{
throw new RuntimeException("File too long to read: " + f);
}
int sz = (int)f.length();
byte[] buff = new byte[sz];
try
{
DataInputStream din=new DataInputStream(new FileInputStream(f));
din.readFully(buff);
din.close();

return ByteString.copyFrom(buff);
}
catch(java.io.IOException e)
{
throw new RuntimeException(e);
}

}


public File getFileForKey(ByteString key)
{
String name = HexUtil.getHexString(key);

return new File(base, name);

}

}
1 change: 1 addition & 0 deletions miner/BUILD
Expand Up @@ -7,6 +7,7 @@ java_library(
"//protolib:protogrpc",
"//lib:lib",
"//lib:rocksdb",
"//lib:atomicfiledb",
"//client",
"@duckutil//:duckutil_jsonrpc_lib",
"@duckutil//:duckutil_lib",
Expand Down
5 changes: 5 additions & 0 deletions miner/src/plow/MrPlow.java
Expand Up @@ -23,6 +23,7 @@
import snowblossom.lib.db.DB;
import snowblossom.lib.db.lobstack.LobstackDB;
import snowblossom.lib.db.rocksdb.JRocksDB;
import snowblossom.lib.db.atomicfile.AtomicFileDB;
import snowblossom.mining.proto.*;
import snowblossom.proto.*;
import snowblossom.proto.UserServiceGrpc.UserServiceBlockingStub;
Expand Down Expand Up @@ -176,6 +177,10 @@ else if (db_type.equals("lobstack"))
{
db = new DB(config, new LobstackDB(config));
}
else if (db_type.equals("atomic_file"))
{
db = new DB(config, new AtomicFileDB(config));
}
else
{
logger.log(Level.SEVERE, String.format("Unknown db_type: %s", db_type));
Expand Down
1 change: 1 addition & 0 deletions systemtests/test/SpoonTest.java
Expand Up @@ -492,6 +492,7 @@ private MrPlow startMrPlow(int node_port, AddressSpecHash pool_addr) throws Exce
config_map.put("node_host", "localhost");
config_map.put("node_port", "" + node_port);
config_map.put("db_type", "rocksdb");
config_map.put("db_type", "atomic_file");
config_map.put("db_path", plow_db_path +"/plowdb");
config_map.put("pool_fee", "0.01");
config_map.put("pool_address", pool_addr.toAddressString(new NetworkParamsRegtest()));
Expand Down

0 comments on commit 1cac13d

Please sign in to comment.