新增IDA码的方法
/root/dsnet-accesser/conf/core-org-bindings.xml文件中,
在现有的三四种IDA码的后面,增加一种
<bindns:implementation class="org.cleversafe.ida.CosetCode.CosetInformationDispersalCodec" referral="cosetcodec" minVersion="1.0" maxVersion="1.0"/>
然后在create_vault命令中的vault配置xml中进行设置
/root/dsnet-accesser/bin/dsnet-create-vault --name="iqn.2010-05.anycn" --descriptor="/root/dsnet-accesser/conf/anycn.xml"
如:anycn.xml中
<!-- Information Dispersal Algorithm -->
<vault:ida kind="IDA" referral="cosetcodec" version="1">
<eval:param name="num-slices">
<eval:literal type="int" value="8"/>
</eval:param>
<eval:param name="threshold">
<eval:literal type="int" value="6"/>
</eval:param>
</vault:ida>
./dsnet-create-vault
好像有二个接口:
1、具体实现是在org.cleversafe.layer.access.GridAccessDaemon 中有函数
private class VaultStatus implements VaultStatusMBean
VaultStatus(文件名为GridAccessDaemon )中有:
public String createVault(String descriptor, String name)
调用的可能是:
LocalFileVaultManager implements VaultManager中的:
org.cleversafe.vault.managers.LocalFileVaultManager.createVault(String, String, UUID, CredentialsManager)
这一块又用到了hibernate,至于吗,要用这么多中间件。
vault的信息是存在javaDB数据库中的。
库的位置是在/root/dsnet-accesser/output/accesser/directory/directory.db,这个目录就是数据库。
注: 该库只能一个用户同时访问,所以accesser要先关掉。
用eclipse的插件“Eclipse Data Tools Platform”可以编辑查看。
APP库中的VAULT表
结果如下:
VAULT_ID | VAULT_IDENTIFIER | VAULT_NAME |
---|---|---|
131072 | 36a477ba-737c-475c-ad98-bb99370103c5 | iqn.2010-03.sjtu |
294912 | d140b7a4-b64d-48ab-861c-3a6eaa8c93fb | iqn.2010-05.anycn |
SERVICE表:
SERVICE_ID | SERVICE_NAME | SERVICE_TYPE | OBJ_VERSION | SERVICE_VAULT |
---|---|---|---|---|
163840 | iqn.2010-03.sjtu | iscsi | 0 | 131072 |
SERVICE_INTERFACE表:
SERVICE_INTERFACE_ID | SERVICE_INTERFACE_HOST | SERVICE_INTERFACE_PORT | SERVICE_INTERFACE_AUTOSTART | SERVICE_INTERFACE_TYPE | OBJ_VERSION |
---|---|---|---|---|---|
1 | 0.0.0.0 | 3260 | 1 | iscsi | 5 |
SERVICE_TO_SERVICE_INTERFACE表:
SERVICE_INTERFACE_ID SERVICE_ID
-------------------- ----------
1 163840
此时:/root/dsnet-accesser/bin/dsnet-list-targets
+------------------+------------------+--------------------------------------+
| iqn.2010-03.sjtu | iqn.2010-03.sjtu | 36a477ba-737c-475c-ad98-bb99370103c5 |
+------------------+------------------+--------------------------------------+
vault表与vaultstate绑定的(org.cleversafe.vault.managers.state.VaultState)
以上是数据库这一块写好了。
xml这一块
应该是用xmlbean, 这一块的代码写的很乱,框架用了很多,但是接口并没有写成活的。
org.cleversafe.vault.managers.LocalFileVaultManager.getVaultInstance(UUID, InputStream, Credentials, KeyPair)
中,
XMLVaultDescriptor(din, ctx);
中是对xml进行解析。
一层层下去,org.cleversafe.vault.XMLVaultDescriptor.loadVaultFromXML(InputStream)中vd.getVault().getIda()就是读出来
IDA的。
anycn.xml
access control这一块 :
本函数中用到
org.cleversafe.vault.managers.LocalFileVaultManager.createVaultACL(UUID, File, Credentials, PublicKey)
下面来看storeslices:
上面的org.cleversafe.vault.managers.LocalFileVaultManager.createVault(String, String, UUID, CredentialsManager)中,
调用org.cleversafe.vault.managers.LocalFileVaultManager.executeOnStores(UUID, File, Credentials, KeyPair, StoreExecuter, boolean)
在store slices中安装vault。
另一方面我们来看一下vault这个东西。
org.cleversafe.layer.block.dsd.BlockDeviceMain中新实例化一个BlockDeviceVault
org.cleversafe.layer.block.BlockDeviceVault<<
extends BaseVault (public class BlockDeviceVault extends BaseVault )
BaseVault中就有了decodec就是IDA的编码,但是
public abstract class BaseVault implements Vault
vault中没有这个码,但是有get这个码的方法。
用命令:find /root/dsnet-accesser/ | xargs grep "BlockDevice"
可以查到,在blockdevice-org-bindings.xml中有用到“org.cleversafe.layer.block.BlockDeviceVault”这个类,NND。
./conf/blockdevice-org-bindings.xml: <bindns:implementation class="org.cleversafe.layer.block.BlockDeviceVault" referral="block"/>