diff --git a/.classpath b/.classpath index f2285afcc..2119bae14 100644 --- a/.classpath +++ b/.classpath @@ -1,6 +1,6 @@ - + @@ -18,9 +18,22 @@ - + + + + + + + + + + + + + + @@ -29,8 +42,8 @@ + - diff --git a/.gitignore b/.gitignore index 227d1001f..96669ad97 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,14 @@ /bin/ install-packages/windows/SDFS-2.0.13-Setup.exe install-packages/windows/bin/jre/ +install-packages/windows/wix/ install-packages/SDFS-3.0.1-Setup.exe windows-exe/*/x64 windows-exe/*/Debug/ windows-exe/*/Release/ windows-exe/*/ipch/ +windows-exe/WindowsSetup/WindowsSetup/bin/ +windows-exe/WindowsSetup/WindowsSetup/obj/ windows-exe/x64 windows-exe/Debug/ windows-exe/Release/ @@ -35,3 +38,4 @@ pkgs/*.rpm pkgs/*.deb pkgs/*.jar .project +install-packages/docker run --name sdfs-gcs -e TYPE=GOOGL.sh diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs index 9eb2394c3..ebddc4d72 100644 --- a/.settings/org.eclipse.core.resources.prefs +++ b/.settings/org.eclipse.core.resources.prefs @@ -1,5 +1,5 @@ eclipse.preferences.version=1 -encoding//src/resources=UTF-8 encoding//test/java=UTF-8 encoding/=UTF-8 +encoding/resources=UTF-8 encoding/src=UTF-8 diff --git a/.settings/org.eclipse.jdt.apt.core.prefs b/.settings/org.eclipse.jdt.apt.core.prefs index d4313d4b2..4f7c572de 100644 --- a/.settings/org.eclipse.jdt.apt.core.prefs +++ b/.settings/org.eclipse.jdt.apt.core.prefs @@ -1,2 +1,4 @@ eclipse.preferences.version=1 org.eclipse.jdt.apt.aptEnabled=false +org.eclipse.jdt.apt.genSrcDir=target\\generated-sources\\annotations +org.eclipse.jdt.apt.genTestSrcDir=target\\generated-test-sources\\test-annotations diff --git a/Dockerfile b/Dockerfile index e163d2e87..9f51e33b4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,23 +8,18 @@ COPY src /sdfs-build/src/ COPY .git /sdfs-build/.git COPY install-packages /sdfs-build/install-packages/ WORKDIR "/sdfs-build" -RUN DEBIAN_FRONTEND="noninteractive" apt update && DEBIAN_FRONTEND="noninteractive" apt upgrade -y && DEBIAN_FRONTEND="noninteractive" apt install -y \ - -y nsis -RUN wget https://nsis.sourceforge.io/mediawiki/images/7/7f/EnVar_plugin.zip && \ - unzip EnVar_plugin.zip -d /usr/share/nsis/ -RUN wget https://nsis.sourceforge.io/mediawiki/images/4/4a/AccessControl.zip && \ - unzip AccessControl.zip -d /usr/share/nsis/ && \ - cp /usr/share/nsis/Plugins/i386-unicode/AccessControl.dll /usr/share/nsis/Plugins/x86-unicode/ -RUN wget https://cdn.azul.com/zulu/bin/zulu11.48.21-ca-jre11.0.11-win_x64.zip && \ - rm -rf install-packages/windows/bin/jre && \ - unzip zulu11.48.21-ca-jre11.0.11-win_x64.zip -d /tmp/ && \ - mv /tmp/zulu11.48.21-ca-jre11.0.11-win_x64 install-packages/windows/bin/jre +RUN DEBIAN_FRONTEND="noninteractive" apt update && DEBIAN_FRONTEND="noninteractive" apt upgrade -y && DEBIAN_FRONTEND="noninteractive" + +#RUN wget https://cdn.azul.com/zulu/bin/zulu18.30.11-ca-jdk18.0.1-win_x64.zip && \ +# rm -rf install-packages/windows/bin/jre && \ +# unzip zulu18.30.11-ca-jdk18.0.1-win_x64.zip -d /tmp/ && \ +# mv /tmp/zulu18.30.11-ca-jdk18.0.1-win_x64 install-packages/windows/bin/jre -RUN wget https://cdn.azul.com/zulu/bin/zulu11.35.13-ca-jdk11.0.5-linux_x64.tar.gz && \ +RUN wget https://cdn.azul.com/zulu/bin/zulu18.30.11-ca-jdk18.0.1-linux_x64.tar.gz && \ rm -rf install-packages/deb/usr/share/sdfs/bin/jre && \ - tar -xzvf zulu11.35.13-ca-jdk11.0.5-linux_x64.tar.gz && \ + tar -xzvf zulu18.30.11-ca-jdk18.0.1-linux_x64.tar.gz && \ mkdir -p install-packages/deb/usr/share/sdfs/bin/ && \ - cp -rf zulu11.35.13-ca-jdk11.0.5-linux_x64 install-packages/deb/usr/share/sdfs/bin/jre + cp -rf zulu18.30.11-ca-jdk18.0.1-linux_x64 install-packages/deb/usr/share/sdfs/bin/jre RUN DEBIAN_FRONTEND="noninteractive" apt update && DEBIAN_FRONTEND="noninteractive" apt upgrade -y && DEBIAN_FRONTEND="noninteractive" apt install -y \ git ENV VERSION=master @@ -42,7 +37,6 @@ RUN cp target/lib/*.jar install-packages/deb/usr/share/sdfs/lib/ && \ cp target/sdfs-${VERSION}.jar install-packages/deb/usr/share/sdfs/lib/sdfs.jar && \ cp target/sdfs-${VERSION}.jar install-packages WORKDIR "/sdfs-build/install-packages/windows" -RUN makensis -V4 -DVERSION=${PKG_VERSION} -DJARVERSION=${VERSION} sdfs_win.nsi WORKDIR "/sdfs-build/install-packages/" RUN chmod 777 deb/sbin/sdfscli && \ chmod 777 deb/usr/share/sdfs/sdfscli @@ -52,9 +46,9 @@ RUN rm -rf *.deb *.rpm && \ fpm -s dir -t deb -n sdfs -v $PKG_VERSION -C deb/ -d fuse --url http://www.opendedup.org -d libxml2 -d libxml2-utils -m sam.silverberg@gmail.com --vendor datishsystems --description "SDFS is an inline deduplication based filesystem" && \ fpm -s dir -t rpm -n sdfs -v $PKG_VERSION -C deb/ -d fuse --url http://www.opendedup.org -d libxml2 -m sam.silverberg@gmail.com --vendor datishsystems --description "SDFS is an inline deduplication based filesystem" WORKDIR "/sdfs-build/install-packages/" -RUN echo "tar cvf - sdfs-${VERSION}.jar sdfs_${PKG_VERSION}_amd64.deb sdfs-${PKG_VERSION}-1.x86_64.rpm SDFS-${PKG_VERSION}-Setup.exe" > export_data.sh && \ +RUN echo "tar cvf - sdfs-${VERSION}.jar sdfs_${PKG_VERSION}_amd64.deb sdfs-${PKG_VERSION}-1.x86_64.rpm" > export_data.sh && \ chmod 700 export_data.sh -ENTRYPOINT tar cvf - sdfs-${VERSION}.jar sdfs_${PKG_VERSION}_amd64.deb sdfs-${PKG_VERSION}-1.x86_64.rpm SDFS-${PKG_VERSION}-Setup.exe +ENTRYPOINT tar cvf - sdfs-${VERSION}.jar sdfs_${PKG_VERSION}_amd64.deb sdfs-${PKG_VERSION}-1.x86_64.rpm FROM ubuntu:20.04 ENV VERSION=master ENV PKG_VERSION=0.0.1 diff --git a/Dockerfile.localbuild b/Dockerfile.localbuild index 315648e3f..7b541f0ce 100644 --- a/Dockerfile.localbuild +++ b/Dockerfile.localbuild @@ -39,23 +39,12 @@ COPY .git /sdfs-build/.git COPY install-packages /sdfs-build/install-packages/ WORKDIR "/sdfs-build" RUN DEBIAN_FRONTEND="noninteractive" apt update && DEBIAN_FRONTEND="noninteractive" apt upgrade -y && DEBIAN_FRONTEND="noninteractive" apt install -y \ - -y nsis -RUN wget https://nsis.sourceforge.io/mediawiki/images/7/7f/EnVar_plugin.zip && \ - unzip EnVar_plugin.zip -d /usr/share/nsis/ -RUN wget https://nsis.sourceforge.io/mediawiki/images/4/4a/AccessControl.zip && \ - unzip AccessControl.zip -d /usr/share/nsis/ && \ - cp /usr/share/nsis/Plugins/i386-unicode/AccessControl.dll /usr/share/nsis/Plugins/x86-unicode/ -RUN wget https://cdn.azul.com/zulu/bin/zulu11.48.21-ca-jre11.0.11-win_x64.zip && \ - rm -rf install-packages/windows/bin/jre && \ - unzip zulu11.48.21-ca-jre11.0.11-win_x64.zip -d /tmp/ && \ - mv /tmp/zulu11.48.21-ca-jre11.0.11-win_x64 install-packages/windows/bin/jre + git RUN wget https://cdn.azul.com/zulu/bin/zulu11.35.13-ca-jdk11.0.5-linux_x64.tar.gz && \ rm -rf install-packages/deb/usr/share/sdfs/bin/jre && \ tar -xzvf zulu11.35.13-ca-jdk11.0.5-linux_x64.tar.gz && \ mkdir -p install-packages/deb/usr/share/sdfs/bin/ && \ cp -rf zulu11.35.13-ca-jdk11.0.5-linux_x64 install-packages/deb/usr/share/sdfs/bin/jre -RUN DEBIAN_FRONTEND="noninteractive" apt update && DEBIAN_FRONTEND="noninteractive" apt upgrade -y && DEBIAN_FRONTEND="noninteractive" apt install -y \ - git ENV VERSION=master ENV PKG_VERSION=0.0.1 ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/ @@ -69,19 +58,18 @@ RUN mvn package RUN cp target/lib/*.jar install-packages/deb/usr/share/sdfs/lib/ && \ cp target/sdfs-${VERSION}.jar install-packages/deb/usr/share/sdfs/lib/sdfs.jar && \ cp target/sdfs-${VERSION}.jar install-packages -WORKDIR "/sdfs-build/install-packages/windows" -RUN makensis -V4 -DVERSION=${PKG_VERSION} -DJARVERSION=${VERSION} sdfs_win.nsi WORKDIR "/sdfs-build/install-packages/" RUN rm -rf *.deb *.rpm && \ cp ../src/readme.txt deb/usr/share/sdfs/ && \ fpm -s dir -t deb -n sdfs -v $PKG_VERSION -C deb/ -d fuse --url http://www.opendedup.org -d libxml2 -d libxml2-utils -m sam.silverberg@gmail.com --vendor datishsystems --description "SDFS is an inline deduplication based filesystem" && \ fpm -s dir -t rpm -n sdfs -v $PKG_VERSION -C deb/ -d fuse --url http://www.opendedup.org -d libxml2 -m sam.silverberg@gmail.com --vendor datishsystems --description "SDFS is an inline deduplication based filesystem" WORKDIR "/sdfs-build/install-packages/" -RUN echo "tar cvf - sdfs-${VERSION}-jar-with-dependencies.jar sdfs_${PKG_VERSION}_amd64.deb sdfs-${PKG_VERSION}-1.x86_64.rpm SDFS-${PKG_VERSION}-Setup.exe" > export_data.sh && \ +RUN echo "tar cvf - sdfs-${VERSION}-jar-with-dependencies.jar sdfs_${PKG_VERSION}_amd64.deb sdfs-${PKG_VERSION}-1.x86_64.rpm" > export_data.sh && \ chmod 700 export_data.sh ENTRYPOINT tar cvf - sdfs-${VERSION}.jar sdfs_${PKG_VERSION}_amd64.deb sdfs-${PKG_VERSION}-1.x86_64.rpm FROM ubuntu:20.04 ENV VERSION=master +ENV PKG_VERSION=0.0.1 LABEL email=samsilverberg@google.com LABEL author="Sam Silverberg" RUN DEBIAN_FRONTEND="noninteractive" apt update && DEBIAN_FRONTEND="noninteractive" apt upgrade -y && DEBIAN_FRONTEND="noninteractive" apt install -y \ @@ -97,9 +85,9 @@ RUN DEBIAN_FRONTEND="noninteractive" apt update && DEBIAN_FRONTEND="noninteracti libxml2-utils \ fuse WORKDIR "/tmp" -COPY --from=builder /sdfs-build/install-packages/sdfs_${VERSION}_amd64.deb . -RUN dpkg -i sdfs_${VERSION}_amd64.deb && \ - rm sdfs_${VERSION}_amd64.deb +COPY --from=builder /sdfs-build/install-packages/sdfs_${PKG_VERSION}_amd64.deb . +RUN dpkg -i sdfs_${PKG_VERSION}_amd64.deb && \ + rm sdfs_${PKG_VERSION}_amd64.deb RUN echo "* hard nofile 65535" >> /etc/security/limits.conf RUN echo "* soft nofile 65535" >> /etc/security/limits.conf COPY --from=builder /sdfs-build/install-packages/docker_run.sh /usr/share/sdfs/docker_run.sh diff --git a/SDFS_DP_Changes_after_100821_till_071221.patch b/SDFS_DP_Changes_after_100821_till_071221.patch new file mode 100644 index 000000000..f60ebca5f --- /dev/null +++ b/SDFS_DP_Changes_after_100821_till_071221.patch @@ -0,0 +1,180 @@ +diff --git a/src/org/opendedup/sdfs/windows/utils/WinRegistry.java b/src/org/opendedup/sdfs/windows/utils/WinRegistry.java +index 8fd690d1..cf1d4d13 100644 +--- a/src/org/opendedup/sdfs/windows/utils/WinRegistry.java ++++ b/src/org/opendedup/sdfs/windows/utils/WinRegistry.java +@@ -1,5 +1,5 @@ + /******************************************************************************* +- * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com ++ * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com + * + * This file is part of OpenDedupe SDFS. + * +@@ -21,65 +21,97 @@ package org.opendedup.sdfs.windows.utils; + import java.io.IOException; + import java.io.InputStream; + import java.io.StringWriter; ++import java.lang.reflect.InvocationTargetException; ++import org.opendedup.logging.SDFSLogger; + +- +-public class WinRegistry { +- public static final int HKEY_LOCAL_MACHINE = 0x80000002; +- ++public class WinRegistry { + public static final int KEY_SZ = 0; + public static final int KEY_DWORD = 1; ++ private static final String REG_QUERY = "reg query "; ++ private static final String REG_STR = "REG_SZ"; ++ private static final String REG_DWORD = "REG_DWORD"; + ++ static String readRegistryRegQuery(String key) throws IOException { ++ String useKey = REG_QUERY + key; ++ int keyType = -1; + +- public static final String readRegistry(String location, String key){ +- try { +- // Run reg query, then read output with StreamReader (internal class) +- Process process = Runtime.getRuntime().exec("reg query " + +- '"'+ location + "\" /v " + key); ++ Process process = Runtime.getRuntime().exec(useKey); ++ StreamReader reader = new StreamReader(process.getInputStream()); + +- StreamReader reader = new StreamReader(process.getInputStream()); +- reader.start(); ++ reader.start(); ++ try { + process.waitFor(); + reader.join(); +- String output = reader.getResult(); +- +- // Output has the following format: +- // \n\n\n\t\t +- if( ! output.contains("\t")){ +- return null; +- } ++ } catch (InterruptedException e) { ++ SDFSLogger.getLog().error(e.getMessage()); ++ Thread.currentThread().interrupt(); ++ } + +- // Parse out the value +- String[] parsed = output.split("\t"); +- return parsed[parsed.length-1]; ++ String result = reader.getResult(); ++ int p = -1; ++ if (result.contains(REG_STR)) { ++ p = result.indexOf(REG_STR); ++ keyType = KEY_SZ; ++ } else if (result.contains(REG_DWORD)) { ++ p = result.indexOf(REG_DWORD); ++ keyType = KEY_DWORD; + } +- catch (Exception e) { ++ ++ if (p == -1) { + return null; + } + ++ switch (keyType) { ++ case KEY_SZ: ++ return result.substring(p + REG_STR.length()).trim(); ++ case KEY_DWORD: ++ String temp = result.substring(p + REG_DWORD.length()).trim(); ++ return Integer.toString((Integer.parseInt(temp.substring("0x".length()), 16))); ++ default: ++ return ""; ++ } + } + + static class StreamReader extends Thread { +- private InputStream is; +- private StringWriter sw= new StringWriter(); ++ private final InputStream mIs; ++ ++ private final StringWriter mSw; + +- public StreamReader(InputStream is) { +- this.is = is; ++ StreamReader(InputStream is) { ++ mIs = is; ++ mSw = new StringWriter(); + } + ++ @Override + public void run() { ++ int c; + try { +- int c; +- while ((c = is.read()) != -1) +- sw.write(c); ++ while ((c = mIs.read()) != -1) { ++ mSw.write(c); ++ } ++ } catch (IOException e) { ++ SDFSLogger.getLog().error(e.getMessage()); + } +- catch (IOException e) { +- } ++ + } + +- public String getResult() { +- return sw.toString(); ++ String getResult() { ++ return mSw.toString(); + } + } + ++ public static String readRegistry(String location, String key) throws IOException { ++ String pathkey = "\"" + ++ location + ++ "\" /v " + ++ key; ++ return readRegistryRegQuery(pathkey); ++ } + ++ public static void main(String[] args) throws IllegalArgumentException, ++ IllegalAccessException, InvocationTargetException { ++ //System.out.println(WinRegistry.readString(HKEY_LOCAL_MACHINE, ++ // "SOFTWARE\\Wow6432Node\\SDFS", "path")); ++ System.out.println("Running Winregistry class"); ++ } + } +diff --git a/src/org/opendedup/util/OSValidator.java b/src/org/opendedup/util/OSValidator.java +index 4a82c493..d83ca3b3 100644 +--- a/src/org/opendedup/util/OSValidator.java ++++ b/src/org/opendedup/util/OSValidator.java +@@ -67,13 +67,13 @@ public class OSValidator { + } + + public static String getProgramBasePath() { +- if (isUnix() || isMac()) +- if(Main.sdfsBasePath.equals("")) { +- return "/opt/sdfs/"; +- } else { +- return Main.sdfsBasePath; +- } +- else { ++ if (isUnix() || isMac()) { ++ if(Main.sdfsBasePath.equals("")) { ++ return "/opt/sdfs/"; ++ } else { ++ return Main.sdfsBasePath; ++ } ++ } else { + try { + return WinRegistry.readRegistry( + "HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\SDFS", "path") + File.separator; +@@ -85,9 +85,9 @@ public class OSValidator { + } + + public static String getConfigPath() { +- if (isUnix() || isMac()) +- return "/etc/sdfs/"; +- else ++ if (isUnix() || isMac()) { ++ return Main.sdfsBasePath + "/etc/sdfs/"; ++ } else + try { + return WinRegistry.readRegistry( + "HKEY_LOCAL_MACHINE\\SOFTWARE\\WOW6432Node\\SDFS", "path") diff --git a/install-packages/deb/sbin/startsdfs b/install-packages/deb/sbin/startsdfs index 884cb8e0f..7a7bf819d 100755 --- a/install-packages/deb/sbin/startsdfs +++ b/install-packages/deb/sbin/startsdfs @@ -9,7 +9,7 @@ EXEC="/usr/share/sdfs/jsvc" BASEPATH="/usr/share/sdfs" PF="sdfs-ncfg.pid" OPTIND=1 -while getopts "v:z:f:p:e:anmzcdshcrl" opt; do +while getopts "v:z:f:p:e:b:t:w:q:anmzcdshcrl" opt; do case $opt in v) CFG="/etc/sdfs/$OPTARG-volume-cfg.xml" @@ -45,7 +45,7 @@ else MEMORY=$MEM fi -LD_PRELOAD="${BASEPATH}/bin/libfuse.so.2" $EXEC -server -outfile '&1' -errfile '&2' -Djava.library.path=${BASEPATH}/bin/ -home ${BASEPATH}/bin/jre -Dorg.apache.commons.logging.Log=fuse.logging.FuseLog -Xss2m \ +$EXEC -server -outfile '&1' -errfile '&2' -Djava.library.path=${BASEPATH}/bin/ -home ${BASEPATH}/bin/jre -Dorg.apache.commons.logging.Log=fuse.logging.FuseLog -Xss2m \ -wait 99999999999 -Dfuse.logging.level=INFO -Dfile.encoding=UTF-8 ${DOCKER_DETATCH} -Xmx$MEMORY$MU -Xms$MEMORY$MU \ --XX:+DisableExplicitGC -pidfile /var/run/$PF -XX:+UseG1GC -Djava.awt.headless=true \ +-XX:+DisableExplicitGC ${JAVA_EXT_CMD} -pidfile /var/run/$PF -XX:+UseG1GC -Djava.awt.headless=true \ -cp ${BASEPATH}/lib/sdfs.jar:${BASEPATH}/lib/* fuse.SDFS.MountSDFS "$@" diff --git a/install-packages/deb/usr/share/sdfs/startsdfs b/install-packages/deb/usr/share/sdfs/startsdfs index 2ded3563b..01bf304ad 100755 --- a/install-packages/deb/usr/share/sdfs/startsdfs +++ b/install-packages/deb/usr/share/sdfs/startsdfs @@ -1,6 +1,6 @@ #!/bin/bash #modprobe fuse > /dev/null -BASEMEMORY="3000" +BASEMEMORY="15000" CACHEMEMORY=512 MPTG=3 LMPTG=2 @@ -9,7 +9,7 @@ EXEC="/usr/share/sdfs/jsvc" BASEPATH="/usr/share/sdfs" PF="sdfs-ncfg.pid" OPTIND=1 -while getopts "v:z:f:p:e:b:t:anmqzcdshcrlw" opt; do +while getopts "v:z:f:p:e:b:t:w:q:anmzcdshcrl" opt; do case $opt in v) CFG="/etc/sdfs/$OPTARG-volume-cfg.xml" @@ -21,7 +21,7 @@ while getopts "v:z:f:p:e:b:t:anmqzcdshcrlw" opt; do n) ;; w) ;; t) TMPDIR="-Djava.io.tmpdir=$OPTARG";; - b) + b) SDFSBASEPATH=$OPTARG BASEPATH="$OPTARG/$BASEPATH" EXEC="$OPTARG/$EXEC";; @@ -53,6 +53,6 @@ else fi LD_PRELOAD="${BASEPATH}/bin/libfuse.so.2" $EXEC -server -outfile '&1' -errfile '&2' -Djava.library.path=${BASEPATH}/bin/ -home ${BASEPATH}/bin/jre -Dorg.apache.commons.logging.Log=fuse.logging.FuseLog -Xss2m \ - -wait 99999999999 -Dfuse.logging.level=INFO -Dfile.encoding=UTF-8 ${DOCKER_DETATCH} -Xmx$MEMORY$MU -Xms$MEMORY$MU \ +${JAVA_EXT_CMD} -wait 99999999999 -Dfuse.logging.level=INFO -Dfile.encoding=UTF-8 ${DOCKER_DETATCH} -Xmx$MEMORY$MU -Xms$MEMORY$MU \ -XX:+DisableExplicitGC -pidfile /var/run/$PF -XX:+UseG1GC ${TMPDIR} -Djava.awt.headless=true \ -cp ${BASEPATH}/lib/sdfs.jar:${BASEPATH}/lib/* fuse.SDFS.MountSDFS "$@" diff --git a/install-packages/windows/bin/jre/LICENSE b/install-packages/windows/bin/jre/LICENSE deleted file mode 100644 index 8b400c7ab..000000000 --- a/install-packages/windows/bin/jre/LICENSE +++ /dev/null @@ -1,347 +0,0 @@ -The GNU General Public License (GPL) - -Version 2, June 1991 - -Copyright (C) 1989, 1991 Free Software Foundation, Inc. -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Everyone is permitted to copy and distribute verbatim copies of this license -document, but changing it is not allowed. - -Preamble - -The licenses for most software are designed to take away your freedom to share -and change it. By contrast, the GNU General Public License is intended to -guarantee your freedom to share and change free software--to make sure the -software is free for all its users. This General Public License applies to -most of the Free Software Foundation's software and to any other program whose -authors commit to using it. (Some other Free Software Foundation software is -covered by the GNU Library General Public License instead.) You can apply it to -your programs, too. - -When we speak of free software, we are referring to freedom, not price. Our -General Public Licenses are designed to make sure that you have the freedom to -distribute copies of free software (and charge for this service if you wish), -that you receive source code or can get it if you want it, that you can change -the software or use pieces of it in new free programs; and that you know you -can do these things. - -To protect your rights, we need to make restrictions that forbid anyone to deny -you these rights or to ask you to surrender the rights. These restrictions -translate to certain responsibilities for you if you distribute copies of the -software, or if you modify it. - -For example, if you distribute copies of such a program, whether gratis or for -a fee, you must give the recipients all the rights that you have. You must -make sure that they, too, receive or can get the source code. And you must -show them these terms so they know their rights. - -We protect your rights with two steps: (1) copyright the software, and (2) -offer you this license which gives you legal permission to copy, distribute -and/or modify the software. - -Also, for each author's protection and ours, we want to make certain that -everyone understands that there is no warranty for this free software. If the -software is modified by someone else and passed on, we want its recipients to -know that what they have is not the original, so that any problems introduced -by others will not reflect on the original authors' reputations. - -Finally, any free program is threatened constantly by software patents. We -wish to avoid the danger that redistributors of a free program will -individually obtain patent licenses, in effect making the program proprietary. -To prevent this, we have made it clear that any patent must be licensed for -everyone's free use or not licensed at all. - -The precise terms and conditions for copying, distribution and modification -follow. - -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - -0. This License applies to any program or other work which contains a notice -placed by the copyright holder saying it may be distributed under the terms of -this General Public License. The "Program", below, refers to any such program -or work, and a "work based on the Program" means either the Program or any -derivative work under copyright law: that is to say, a work containing the -Program or a portion of it, either verbatim or with modifications and/or -translated into another language. (Hereinafter, translation is included -without limitation in the term "modification".) Each licensee is addressed as -"you". - -Activities other than copying, distribution and modification are not covered by -this License; they are outside its scope. The act of running the Program is -not restricted, and the output from the Program is covered only if its contents -constitute a work based on the Program (independent of having been made by -running the Program). Whether that is true depends on what the Program does. - -1. You may copy and distribute verbatim copies of the Program's source code as -you receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice and -disclaimer of warranty; keep intact all the notices that refer to this License -and to the absence of any warranty; and give any other recipients of the -Program a copy of this License along with the Program. - -You may charge a fee for the physical act of transferring a copy, and you may -at your option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Program or any portion of it, thus -forming a work based on the Program, and copy and distribute such modifications -or work under the terms of Section 1 above, provided that you also meet all of -these conditions: - - a) You must cause the modified files to carry prominent notices stating - that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in whole or - in part contains or is derived from the Program or any part thereof, to be - licensed as a whole at no charge to all third parties under the terms of - this License. - - c) If the modified program normally reads commands interactively when run, - you must cause it, when started running for such interactive use in the - most ordinary way, to print or display an announcement including an - appropriate copyright notice and a notice that there is no warranty (or - else, saying that you provide a warranty) and that users may redistribute - the program under these conditions, and telling the user how to view a copy - of this License. (Exception: if the Program itself is interactive but does - not normally print such an announcement, your work based on the Program is - not required to print an announcement.) - -These requirements apply to the modified work as a whole. If identifiable -sections of that work are not derived from the Program, and can be reasonably -considered independent and separate works in themselves, then this License, and -its terms, do not apply to those sections when you distribute them as separate -works. But when you distribute the same sections as part of a whole which is a -work based on the Program, the distribution of the whole must be on the terms -of this License, whose permissions for other licensees extend to the entire -whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest your -rights to work written entirely by you; rather, the intent is to exercise the -right to control the distribution of derivative or collective works based on -the Program. - -In addition, mere aggregation of another work not based on the Program with the -Program (or with a work based on the Program) on a volume of a storage or -distribution medium does not bring the other work under the scope of this -License. - -3. You may copy and distribute the Program (or a work based on it, under -Section 2) in object code or executable form under the terms of Sections 1 and -2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable source - code, which must be distributed under the terms of Sections 1 and 2 above - on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three years, to - give any third party, for a charge no more than your cost of physically - performing source distribution, a complete machine-readable copy of the - corresponding source code, to be distributed under the terms of Sections 1 - and 2 above on a medium customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer to - distribute corresponding source code. (This alternative is allowed only - for noncommercial distribution and only if you received the program in - object code or executable form with such an offer, in accord with - Subsection b above.) - -The source code for a work means the preferred form of the work for making -modifications to it. For an executable work, complete source code means all -the source code for all modules it contains, plus any associated interface -definition files, plus the scripts used to control compilation and installation -of the executable. However, as a special exception, the source code -distributed need not include anything that is normally distributed (in either -source or binary form) with the major components (compiler, kernel, and so on) -of the operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the source -code from the same place counts as distribution of the source code, even though -third parties are not compelled to copy the source along with the object code. - -4. You may not copy, modify, sublicense, or distribute the Program except as -expressly provided under this License. Any attempt otherwise to copy, modify, -sublicense or distribute the Program is void, and will automatically terminate -your rights under this License. However, parties who have received copies, or -rights, from you under this License will not have their licenses terminated so -long as such parties remain in full compliance. - -5. You are not required to accept this License, since you have not signed it. -However, nothing else grants you permission to modify or distribute the Program -or its derivative works. These actions are prohibited by law if you do not -accept this License. Therefore, by modifying or distributing the Program (or -any work based on the Program), you indicate your acceptance of this License to -do so, and all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - -6. Each time you redistribute the Program (or any work based on the Program), -the recipient automatically receives a license from the original licensor to -copy, distribute or modify the Program subject to these terms and conditions. -You may not impose any further restrictions on the recipients' exercise of the -rights granted herein. You are not responsible for enforcing compliance by -third parties to this License. - -7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), conditions -are imposed on you (whether by court order, agreement or otherwise) that -contradict the conditions of this License, they do not excuse you from the -conditions of this License. If you cannot distribute so as to satisfy -simultaneously your obligations under this License and any other pertinent -obligations, then as a consequence you may not distribute the Program at all. -For example, if a patent license would not permit royalty-free redistribution -of the Program by all those who receive copies directly or indirectly through -you, then the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply and -the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents or -other property right claims or to contest validity of any such claims; this -section has the sole purpose of protecting the integrity of the free software -distribution system, which is implemented by public license practices. Many -people have made generous contributions to the wide range of software -distributed through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing to -distribute software through any other system and a licensee cannot impose that -choice. - -This section is intended to make thoroughly clear what is believed to be a -consequence of the rest of this License. - -8. If the distribution and/or use of the Program is restricted in certain -countries either by patents or by copyrighted interfaces, the original -copyright holder who places the Program under this License may add an explicit -geographical distribution limitation excluding those countries, so that -distribution is permitted only in or among countries not thus excluded. In -such case, this License incorporates the limitation as if written in the body -of this License. - -9. The Free Software Foundation may publish revised and/or new versions of the -General Public License from time to time. Such new versions will be similar in -spirit to the present version, but may differ in detail to address new problems -or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any later -version", you have the option of following the terms and conditions either of -that version or of any later version published by the Free Software Foundation. -If the Program does not specify a version number of this License, you may -choose any version ever published by the Free Software Foundation. - -10. If you wish to incorporate parts of the Program into other free programs -whose distribution conditions are different, write to the author to ask for -permission. For software which is copyrighted by the Free Software Foundation, -write to the Free Software Foundation; we sometimes make exceptions for this. -Our decision will be guided by the two goals of preserving the free status of -all derivatives of our free software and of promoting the sharing and reuse of -software generally. - -NO WARRANTY - -11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR -THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE -STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE -PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND -PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, -YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL -ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE -PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR -INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA -BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER -OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -END OF TERMS AND CONDITIONS - -How to Apply These Terms to Your New Programs - -If you develop a new program, and you want it to be of the greatest possible -use to the public, the best way to achieve this is to make it free software -which everyone can redistribute and change under these terms. - -To do so, attach the following notices to the program. It is safest to attach -them to the start of each source file to most effectively convey the exclusion -of warranty; and each file should have at least the "copyright" line and a -pointer to where the full notice is found. - - One line to give the program's name and a brief idea of what it does. - - Copyright (C) - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the Free - Software Foundation; either version 2 of the License, or (at your option) - any later version. - - This program 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 General Public License for - more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this when it -starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author Gnomovision comes - with ABSOLUTELY NO WARRANTY; for details type 'show w'. This is free - software, and you are welcome to redistribute it under certain conditions; - type 'show c' for details. - -The hypothetical commands 'show w' and 'show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may be -called something other than 'show w' and 'show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your school, -if any, to sign a "copyright disclaimer" for the program, if necessary. Here -is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - 'Gnomovision' (which makes passes at compilers) written by James Hacker. - - signature of Ty Coon, 1 April 1989 - - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General Public -License instead of this License. - - -"CLASSPATH" EXCEPTION TO THE GPL - -Certain source files distributed by Oracle America and/or its affiliates are -subject to the following clarification and special exception to the GPL, but -only where Oracle has expressly included in the particular source file's header -the words "Oracle designates this particular file as subject to the "Classpath" -exception as provided by Oracle in the LICENSE file that accompanied this code." - - Linking this library statically or dynamically with other modules is making - a combined work based on this library. Thus, the terms and conditions of - the GNU General Public License cover the whole combination. - - As a special exception, the copyright holders of this library give you - permission to link this library with independent modules to produce an - executable, regardless of the license terms of these independent modules, - and to copy and distribute the resulting executable under terms of your - choice, provided that you also meet, for each linked independent module, - the terms and conditions of the license of that module. An independent - module is a module which is not derived from or based on this library. If - you modify this library, you may extend this exception to your version of - the library, but you are not obligated to do so. If you do not wish to do - so, delete this exception statement from your version. diff --git a/install-packages/windows/bin/jre/bin/msvcr100.dll b/install-packages/windows/bin/jre/bin/msvcr100.dll deleted file mode 100755 index 0318fb096..000000000 Binary files a/install-packages/windows/bin/jre/bin/msvcr100.dll and /dev/null differ diff --git a/install-packages/windows/bin/jre/bin/server/Xusage.txt b/install-packages/windows/bin/jre/bin/server/Xusage.txt deleted file mode 100644 index 11302aaa6..000000000 --- a/install-packages/windows/bin/jre/bin/server/Xusage.txt +++ /dev/null @@ -1,24 +0,0 @@ - -Xmixed mixed mode execution (default) - -Xint interpreted mode execution only - -Xbootclasspath: - set search path for bootstrap classes and resources - -Xbootclasspath/a: - append to end of bootstrap class path - -Xbootclasspath/p: - prepend in front of bootstrap class path - -Xnoclassgc disable class garbage collection - -Xincgc enable incremental garbage collection - -Xloggc: log GC status to a file with time stamps - -Xbatch disable background compilation - -Xms set initial Java heap size - -Xmx set maximum Java heap size - -Xss set java thread stack size - -Xprof output cpu profiling data - -Xfuture enable strictest checks, anticipating future default - -Xrs reduce use of OS signals by Java/VM (see documentation) - -Xcheck:jni perform additional checks for JNI functions - -Xshare:off do not attempt to use shared class data - -Xshare:auto use shared class data if possible (default) - -Xshare:on require using shared class data, otherwise fail. - -The -X options are non-standard and subject to change without notice. diff --git a/install-packages/windows/bin/jre/lib/accessibility.properties b/install-packages/windows/bin/jre/lib/accessibility.properties deleted file mode 100644 index d9f12e3fd..000000000 --- a/install-packages/windows/bin/jre/lib/accessibility.properties +++ /dev/null @@ -1,6 +0,0 @@ -# -# Load the Java Access Bridge class into the JVM -# -#assistive_technologies=com.sun.java.accessibility.AccessBridge -#screen_magnifier_present=true - diff --git a/install-packages/windows/bin/jre/lib/amd64/jvm.cfg b/install-packages/windows/bin/jre/lib/amd64/jvm.cfg deleted file mode 100644 index 21ab9fd0f..000000000 --- a/install-packages/windows/bin/jre/lib/amd64/jvm.cfg +++ /dev/null @@ -1,38 +0,0 @@ -# -# -# -# Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# -# -# List of JVMs that can be used as an option to java, javac, etc. -# Order is important -- first in this list is the default JVM. -# NOTE that this both this file and its format are UNSUPPORTED and -# WILL GO AWAY in a future release. -# -# You may also select a JVM in an arbitrary location with the -# "-XXaltjvm=" option, but that too is unsupported -# and may not be available in a future release. -# --server KNOWN --client IGNORE diff --git a/install-packages/windows/bin/jre/lib/calendars.properties b/install-packages/windows/bin/jre/lib/calendars.properties deleted file mode 100644 index 49f68aca4..000000000 --- a/install-packages/windows/bin/jre/lib/calendars.properties +++ /dev/null @@ -1,60 +0,0 @@ -# Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# -# Japanese imperial calendar -# -# Meiji since 1868-01-01 00:00:00 local time (Gregorian) -# Taisho since 1912-07-30 00:00:00 local time (Gregorian) -# Showa since 1926-12-25 00:00:00 local time (Gregorian) -# Heisei since 1989-01-08 00:00:00 local time (Gregorian) -calendar.japanese.type: LocalGregorianCalendar -calendar.japanese.eras: \ - name=Meiji,abbr=M,since=-3218832000000; \ - name=Taisho,abbr=T,since=-1812153600000; \ - name=Showa,abbr=S,since=-1357603200000; \ - name=Heisei,abbr=H,since=600220800000 - -# -# Taiwanese calendar -# Minguo since 1911-01-01 00:00:00 local time (Gregorian) -calendar.taiwanese.type: LocalGregorianCalendar -calendar.taiwanese.eras: \ - name=MinGuo,since=-1830384000000 - -# -# Thai Buddhist calendar -# Buddhist Era since -542-01-01 00:00:00 local time (Gregorian) -calendar.thai-buddhist.type: LocalGregorianCalendar -calendar.thai-buddhist.eras: \ - name=BuddhistEra,abbr=B.E.,since=-79302585600000 -calendar.thai-buddhist.year-boundary: \ - day1=4-1,since=-79302585600000; \ - day1=1-1,since=-915148800000 - -# -# Hijrah calendars -# -calendar.hijrah.Hijrah-umalqura: hijrah-config-umalqura.properties -calendar.hijrah.Hijrah-umalqura.type: islamic-umalqura diff --git a/install-packages/windows/bin/jre/lib/classlist b/install-packages/windows/bin/jre/lib/classlist index 9460e1fbe..20c789dbf 100755 --- a/install-packages/windows/bin/jre/lib/classlist +++ b/install-packages/windows/bin/jre/lib/classlist @@ -1,1163 +1,1418 @@ -java/lang/Object -java/lang/String +# NOTE: Do not modify this file. +# +# This file is generated via the -XX:DumpLoadedClassList= option +# and is used at CDS archive dump time (see -Xshare:dump). +# +java/io/BufferedInputStream +java/io/BufferedOutputStream +java/io/BufferedWriter +java/io/ByteArrayInputStream +java/io/ByteArrayOutputStream +java/io/Closeable +java/io/DataInput +java/io/DataInputStream +java/io/DataOutput +java/io/DefaultFileSystem +java/io/File +java/io/File$PathStatus +java/io/FileCleanable +java/io/FileDescriptor +java/io/FileDescriptor$1 +java/io/FileInputStream +java/io/FileInputStream$1 +java/io/FileOutputStream +java/io/FilePermission +java/io/FileSystem +java/io/FilterInputStream +java/io/FilterOutputStream +java/io/Flushable +java/io/InputStream +java/io/ObjectStreamField +java/io/OutputStream +java/io/OutputStreamWriter +java/io/PrintStream +java/io/RandomAccessFile +java/io/RandomAccessFile$1 +java/io/RandomAccessFile$2 java/io/Serializable -java/lang/Comparable +java/io/WinNTFileSystem +java/io/Writer +java/lang/AbstractStringBuilder +java/lang/Appendable +java/lang/ApplicationShutdownHooks +java/lang/ApplicationShutdownHooks$1 +java/lang/ArithmeticException +java/lang/ArrayStoreException +java/lang/AssertionStatusDirectives +java/lang/AutoCloseable +java/lang/Boolean +java/lang/BootstrapMethodError +java/lang/Byte java/lang/CharSequence +java/lang/Character +java/lang/Character$CharacterCache +java/lang/CharacterData +java/lang/CharacterData00 +java/lang/CharacterDataLatin1 java/lang/Class -java/lang/reflect/GenericDeclaration -java/lang/reflect/AnnotatedElement -java/lang/reflect/Type -java/lang/Cloneable +java/lang/Class$1 +java/lang/Class$3 +java/lang/Class$Atomic +java/lang/Class$ReflectionData +java/lang/ClassCastException java/lang/ClassLoader -java/lang/System -java/lang/Throwable +java/lang/ClassLoader$ParallelLoaders +java/lang/ClassNotFoundException +java/lang/ClassValue +java/lang/ClassValue$Entry +java/lang/ClassValue$Identity +java/lang/ClassValue$Version +java/lang/Cloneable +java/lang/Comparable +java/lang/CompoundEnumeration +java/lang/Double +java/lang/Enum java/lang/Error -java/lang/ThreadDeath java/lang/Exception -java/lang/RuntimeException -java/lang/SecurityManager -java/security/ProtectionDomain -java/security/AccessControlContext -java/security/SecureClassLoader -java/lang/ClassNotFoundException -java/lang/ReflectiveOperationException -java/lang/NoClassDefFoundError +java/lang/Float +java/lang/IllegalArgumentException +java/lang/IllegalMonitorStateException +java/lang/IncompatibleClassChangeError +java/lang/Integer +java/lang/Integer$IntegerCache +java/lang/InternalError +java/lang/Iterable java/lang/LinkageError -java/lang/ClassCastException -java/lang/ArrayStoreException -java/lang/VirtualMachineError +java/lang/LiveStackFrame +java/lang/LiveStackFrameInfo +java/lang/Long +java/lang/Long$LongCache +java/lang/Math +java/lang/Module +java/lang/Module$ArchivedData +java/lang/Module$ReflectionData +java/lang/ModuleLayer +java/lang/ModuleLayer$Controller +java/lang/NamedPackage +java/lang/NoClassDefFoundError +java/lang/NoSuchFieldException +java/lang/NoSuchMethodError +java/lang/NoSuchMethodException +java/lang/NullPointerException +java/lang/Number +java/lang/Object java/lang/OutOfMemoryError +java/lang/Package +java/lang/Package$VersionInfo +java/lang/PublicMethods$Key +java/lang/PublicMethods$MethodList +java/lang/Readable +java/lang/Record +java/lang/ReflectiveOperationException +java/lang/Runnable +java/lang/Runtime +java/lang/Runtime$Version +java/lang/RuntimeException +java/lang/RuntimePermission +java/lang/SecurityManager +java/lang/Short +java/lang/Shutdown +java/lang/Shutdown$Lock +java/lang/StackFrameInfo java/lang/StackOverflowError -java/lang/IllegalMonitorStateException -java/lang/ref/Reference -java/lang/ref/SoftReference -java/lang/ref/WeakReference -java/lang/ref/FinalReference -java/lang/ref/PhantomReference -java/lang/ref/Finalizer +java/lang/StackStreamFactory$AbstractStackWalker +java/lang/StackTraceElement +java/lang/StackWalker +java/lang/StackWalker$StackFrame +java/lang/String +java/lang/String$CaseInsensitiveComparator +java/lang/StringBuffer +java/lang/StringBuilder +java/lang/StringCoding +java/lang/StringConcatHelper +java/lang/StringLatin1 +java/lang/StringLatin1$CharsSpliterator +java/lang/StringUTF16 +java/lang/StringUTF16$CharsSpliterator +java/lang/System +java/lang/System$2 +java/lang/System$Logger +java/lang/System$LoggerFinder +java/lang/Terminator +java/lang/Terminator$1 java/lang/Thread -java/lang/Runnable -java/lang/ThreadGroup java/lang/Thread$UncaughtExceptionHandler -java/util/Properties -java/util/Hashtable -java/util/Map -java/util/Dictionary -java/lang/Module -java/lang/reflect/AccessibleObject -java/lang/reflect/Field -java/lang/reflect/Member -java/lang/reflect/Parameter -java/lang/reflect/Method -java/lang/reflect/Executable -java/lang/reflect/Constructor -jdk/internal/reflect/MagicAccessorImpl -jdk/internal/reflect/MethodAccessorImpl -jdk/internal/reflect/MethodAccessor -jdk/internal/reflect/ConstructorAccessorImpl -jdk/internal/reflect/ConstructorAccessor -jdk/internal/reflect/DelegatingClassLoader -jdk/internal/reflect/ConstantPool -jdk/internal/reflect/UnsafeStaticFieldAccessorImpl -jdk/internal/reflect/UnsafeFieldAccessorImpl -jdk/internal/reflect/FieldAccessorImpl -jdk/internal/reflect/FieldAccessor -jdk/internal/reflect/CallerSensitive +java/lang/ThreadDeath +java/lang/ThreadGroup +java/lang/ThreadLocal +java/lang/ThreadLocal$ThreadLocalMap +java/lang/ThreadLocal$ThreadLocalMap$Entry +java/lang/Throwable +java/lang/VersionProps +java/lang/VirtualMachineError +java/lang/Void +java/lang/WeakPairMap +java/lang/WeakPairMap$Pair +java/lang/WeakPairMap$Pair$Lookup java/lang/annotation/Annotation +java/lang/constant/Constable +java/lang/constant/ConstantDesc +java/lang/invoke/AbstractValidatingLambdaMetafactory +java/lang/invoke/BootstrapMethodInvoker +java/lang/invoke/BoundMethodHandle +java/lang/invoke/BoundMethodHandle$Specializer +java/lang/invoke/BoundMethodHandle$Specializer$Factory +java/lang/invoke/BoundMethodHandle$SpeciesData +java/lang/invoke/BoundMethodHandle$Species_D +java/lang/invoke/BoundMethodHandle$Species_DL +java/lang/invoke/BoundMethodHandle$Species_I +java/lang/invoke/BoundMethodHandle$Species_IL +java/lang/invoke/BoundMethodHandle$Species_L +java/lang/invoke/BoundMethodHandle$Species_LJ +java/lang/invoke/BoundMethodHandle$Species_LL +java/lang/invoke/BoundMethodHandle$Species_LLL +java/lang/invoke/BoundMethodHandle$Species_LLLL +java/lang/invoke/BoundMethodHandle$Species_LLLLL +java/lang/invoke/BoundMethodHandle$Species_LLLLLL +java/lang/invoke/BoundMethodHandle$Species_LLLLLLL +java/lang/invoke/BoundMethodHandle$Species_LLLLLLLL +java/lang/invoke/BoundMethodHandle$Species_LLLLLLLLL +java/lang/invoke/BoundMethodHandle$Species_LLLLLLLLLL +java/lang/invoke/BoundMethodHandle$Species_LLLLLLLLLLL +java/lang/invoke/BoundMethodHandle$Species_LLLLLLLLLLLL +java/lang/invoke/BoundMethodHandle$Species_LLLLLLLLLLLLL +java/lang/invoke/CallSite +java/lang/invoke/ClassSpecializer +java/lang/invoke/ClassSpecializer$1 +java/lang/invoke/ClassSpecializer$Factory +java/lang/invoke/ClassSpecializer$SpeciesData +java/lang/invoke/ConstantCallSite +java/lang/invoke/DelegatingMethodHandle +java/lang/invoke/DelegatingMethodHandle$Holder java/lang/invoke/DirectMethodHandle -java/lang/invoke/MethodHandle -java/lang/invoke/VarHandle +java/lang/invoke/DirectMethodHandle$2 +java/lang/invoke/DirectMethodHandle$Accessor +java/lang/invoke/DirectMethodHandle$Constructor +java/lang/invoke/DirectMethodHandle$Holder +java/lang/invoke/DirectMethodHandle$Interface +java/lang/invoke/InfoFromMemberName +java/lang/invoke/InnerClassLambdaMetafactory +java/lang/invoke/InnerClassLambdaMetafactory$ForwardingMethodGenerator +java/lang/invoke/InvokerBytecodeGenerator +java/lang/invoke/InvokerBytecodeGenerator$2 +java/lang/invoke/InvokerBytecodeGenerator$ClassData +java/lang/invoke/Invokers +java/lang/invoke/Invokers$Holder +java/lang/invoke/LambdaForm +java/lang/invoke/LambdaForm$BasicType +java/lang/invoke/LambdaForm$Holder +java/lang/invoke/LambdaForm$Kind +java/lang/invoke/LambdaForm$Name +java/lang/invoke/LambdaForm$NamedFunction +java/lang/invoke/LambdaFormBuffer +java/lang/invoke/LambdaFormEditor +java/lang/invoke/LambdaFormEditor$1 +java/lang/invoke/LambdaFormEditor$Transform +java/lang/invoke/LambdaFormEditor$TransformKey +java/lang/invoke/LambdaMetafactory +java/lang/invoke/LambdaProxyClassArchive java/lang/invoke/MemberName -java/lang/invoke/ResolvedMethodName +java/lang/invoke/MemberName$Factory +java/lang/invoke/MethodHandle +java/lang/invoke/MethodHandleImpl +java/lang/invoke/MethodHandleImpl$1 +java/lang/invoke/MethodHandleImpl$AsVarargsCollector +java/lang/invoke/MethodHandleImpl$Intrinsic +java/lang/invoke/MethodHandleImpl$IntrinsicMethodHandle +java/lang/invoke/MethodHandleInfo java/lang/invoke/MethodHandleNatives -java/lang/invoke/LambdaForm -java/lang/invoke/MethodType -java/lang/BootstrapMethodError -java/lang/invoke/CallSite java/lang/invoke/MethodHandleNatives$CallSiteContext -java/lang/invoke/ConstantCallSite +java/lang/invoke/MethodHandleStatics +java/lang/invoke/MethodHandles +java/lang/invoke/MethodHandles$1 +java/lang/invoke/MethodHandles$Lookup +java/lang/invoke/MethodHandles$Lookup$ClassDefiner +java/lang/invoke/MethodHandles$Lookup$ClassFile +java/lang/invoke/MethodHandles$Lookup$ClassOption +java/lang/invoke/MethodType +java/lang/invoke/MethodType$ConcurrentWeakInternSet +java/lang/invoke/MethodType$ConcurrentWeakInternSet$WeakEntry +java/lang/invoke/MethodTypeForm java/lang/invoke/MutableCallSite -java/lang/invoke/VolatileCallSite -java/lang/AssertionStatusDirectives -java/lang/StringBuffer -java/lang/AbstractStringBuilder -java/lang/Appendable -java/lang/StringBuilder -jdk/internal/misc/Unsafe -jdk/internal/module/Modules -java/io/ByteArrayInputStream -java/io/InputStream -java/io/Closeable -java/lang/AutoCloseable -java/net/URL -java/util/jar/Manifest -jdk/internal/loader/ClassLoaders -jdk/internal/loader/ClassLoaders$AppClassLoader -jdk/internal/loader/BuiltinClassLoader -jdk/internal/loader/ClassLoaders$PlatformClassLoader -java/security/CodeSource -java/lang/StackTraceElement -java/nio/Buffer -java/lang/StackWalker -java/lang/StackStreamFactory$AbstractStackWalker -java/lang/StackFrameInfo -java/lang/StackWalker$StackFrame -java/lang/LiveStackFrameInfo -java/lang/LiveStackFrame -java/util/concurrent/locks/AbstractOwnableSynchronizer -java/lang/Boolean -java/lang/Character -java/lang/Float -java/lang/Number -java/lang/Double -java/lang/Byte -java/lang/Short -java/lang/Integer -java/lang/Long -java/lang/NullPointerException -java/lang/ArithmeticException -java/io/ObjectStreamField -java/lang/String$CaseInsensitiveComparator -java/util/Comparator -java/security/AccessController -java/util/Set -java/util/Collection -java/lang/Iterable -java/util/ImmutableCollections$Set12 -java/util/ImmutableCollections$AbstractImmutableSet -java/util/ImmutableCollections$AbstractImmutableCollection -java/util/AbstractCollection -java/util/Objects -jdk/internal/reflect/ReflectionFactory$GetReflectionFactoryAction -java/security/PrivilegedAction -java/security/cert/Certificate -java/util/HashSet -java/util/AbstractSet -java/util/HashMap -java/util/AbstractMap -java/util/concurrent/ConcurrentHashMap -java/util/concurrent/ConcurrentMap -java/lang/Runtime -java/util/concurrent/ConcurrentHashMap$Segment -java/util/concurrent/locks/ReentrantLock -java/util/concurrent/locks/Lock -java/util/concurrent/ConcurrentHashMap$CounterCell -java/util/concurrent/ConcurrentHashMap$Node -java/util/Map$Entry -java/util/concurrent/locks/LockSupport -java/util/concurrent/ConcurrentHashMap$ReservationNode -jdk/internal/reflect/ReflectionFactory -java/lang/ref/Reference$ReferenceHandler -jdk/internal/ref/Cleaner -java/lang/ref/ReferenceQueue -java/lang/ref/ReferenceQueue$Null -java/lang/ref/ReferenceQueue$Lock -java/lang/ref/Reference$1 -jdk/internal/misc/JavaLangRefAccess -jdk/internal/misc/SharedSecrets -java/lang/ref/Finalizer$FinalizerThread -jdk/internal/misc/VM -java/lang/StringLatin1 -java/util/Properties$EntrySet -java/util/concurrent/ConcurrentHashMap$EntrySetView -java/util/concurrent/ConcurrentHashMap$CollectionView -java/util/Collections -java/util/Collections$EmptySet -java/util/Collections$EmptyList -java/util/RandomAccess -java/util/AbstractList -java/util/List -java/util/Collections$EmptyMap -java/util/Collections$SynchronizedSet -java/util/Collections$SynchronizedCollection -java/lang/reflect/Array -java/util/concurrent/ConcurrentHashMap$EntryIterator -java/util/Iterator -java/util/concurrent/ConcurrentHashMap$BaseIterator -java/util/concurrent/ConcurrentHashMap$Traverser -java/util/concurrent/ConcurrentHashMap$MapEntry -java/util/ImmutableCollections$MapN -java/util/ImmutableCollections$AbstractImmutableMap -java/lang/Math -jdk/internal/util/StaticProperty -java/lang/VersionProps -java/io/FileInputStream -java/io/FileDescriptor -java/io/FileDescriptor$1 -jdk/internal/misc/JavaIOFileDescriptorAccess -java/io/FileOutputStream -java/io/OutputStream -java/io/Flushable -java/io/BufferedInputStream -java/io/FilterInputStream -java/io/PrintStream -java/io/FilterOutputStream -java/io/BufferedOutputStream -java/io/OutputStreamWriter -java/io/Writer -java/nio/charset/Charset -sun/nio/cs/StandardCharsets -java/nio/charset/spi/CharsetProvider -java/lang/ThreadLocal -java/util/concurrent/atomic/AtomicInteger -sun/security/action/GetPropertyAction -java/util/Arrays -sun/nio/cs/StandardCharsets$Aliases -sun/util/PreHashedMap -sun/nio/cs/StandardCharsets$Cache -sun/nio/cs/UTF_8 -sun/nio/cs/Unicode -sun/nio/cs/HistoricallyNamedCharset -sun/nio/cs/ISO_8859_1 -sun/nio/cs/US_ASCII -java/nio/charset/StandardCharsets -sun/nio/cs/UTF_16BE -sun/nio/cs/UTF_16LE -sun/nio/cs/UTF_16 -sun/nio/cs/StandardCharsets$Classes -sun/nio/cs/MS1252 -java/lang/StringUTF16 -sun/nio/cs/SingleByte -java/lang/Class$ReflectionData -java/lang/Class$Atomic -java/lang/reflect/Modifier -java/lang/reflect/ReflectAccess -jdk/internal/reflect/LangReflectAccess -java/lang/Class$1 -jdk/internal/reflect/Reflection -java/util/HashMap$Node -jdk/internal/reflect/NativeConstructorAccessorImpl -jdk/internal/reflect/DelegatingConstructorAccessorImpl -sun/nio/cs/StreamEncoder -sun/nio/cs/SingleByte$Encoder -sun/nio/cs/ArrayEncoder -java/nio/charset/CharsetEncoder -java/nio/charset/CodingErrorAction -java/nio/ByteBuffer -java/nio/Buffer$1 -jdk/internal/misc/JavaNioAccess -java/nio/HeapByteBuffer -java/nio/ByteOrder -java/io/BufferedWriter -java/lang/Terminator -java/lang/Terminator$1 -jdk/internal/misc/Signal$Handler -jdk/internal/misc/Signal -java/util/Hashtable$Entry -jdk/internal/misc/Signal$NativeHandler -java/lang/Integer$IntegerCache -jdk/internal/misc/OSEnvironment -sun/io/Win32ErrorMode -java/lang/System$2 -jdk/internal/misc/JavaLangAccess -java/io/File -java/io/DefaultFileSystem -java/io/WinNTFileSystem -java/io/FileSystem -java/io/ExpiringCache -java/io/ExpiringCache$1 -java/util/LinkedHashMap -java/lang/IllegalArgumentException -java/lang/invoke/MethodHandleStatics -java/lang/CharacterData -java/lang/CharacterDataLatin1 -jdk/internal/module/ModuleBootstrap +java/lang/invoke/ResolvedMethodName +java/lang/invoke/SimpleMethodHandle +java/lang/invoke/StringConcatFactory +java/lang/invoke/StringConcatFactory$1 +java/lang/invoke/StringConcatFactory$2 +java/lang/invoke/StringConcatFactory$3 +java/lang/invoke/TypeConvertingMethodAdapter +java/lang/invoke/TypeDescriptor +java/lang/invoke/TypeDescriptor$OfField +java/lang/invoke/TypeDescriptor$OfMethod +java/lang/invoke/VarForm +java/lang/invoke/VarHandle +java/lang/invoke/VarHandle$AccessDescriptor +java/lang/invoke/VarHandle$AccessMode +java/lang/invoke/VarHandle$AccessType +java/lang/invoke/VarHandleGuards +java/lang/invoke/VarHandleInts$FieldInstanceReadOnly +java/lang/invoke/VarHandleInts$FieldInstanceReadWrite +java/lang/invoke/VarHandleInts$FieldStaticReadOnly +java/lang/invoke/VarHandleInts$FieldStaticReadWrite +java/lang/invoke/VarHandleLongs$FieldInstanceReadOnly +java/lang/invoke/VarHandleLongs$FieldInstanceReadWrite +java/lang/invoke/VarHandleReferences$Array +java/lang/invoke/VarHandleReferences$FieldInstanceReadOnly +java/lang/invoke/VarHandleReferences$FieldInstanceReadWrite +java/lang/invoke/VarHandles +java/lang/invoke/VarHandles$1 +java/lang/invoke/VolatileCallSite +java/lang/module/Configuration java/lang/module/ModuleDescriptor java/lang/module/ModuleDescriptor$1 -jdk/internal/misc/JavaLangModuleAccess -java/util/ImmutableCollections -jdk/internal/module/ModulePatcher -java/util/ImmutableCollections$SetN -jdk/internal/module/ArchivedModuleGraph -jdk/internal/module/SystemModuleFinders -java/net/URI -java/net/URI$1 -jdk/internal/misc/JavaNetUriAccess -jdk/internal/module/SystemModulesMap -jdk/internal/module/SystemModules$all -jdk/internal/module/SystemModules -jdk/internal/module/Builder -java/lang/module/ModuleDescriptor$Requires +java/lang/module/ModuleDescriptor$Builder java/lang/module/ModuleDescriptor$Exports +java/lang/module/ModuleDescriptor$Modifier java/lang/module/ModuleDescriptor$Opens java/lang/module/ModuleDescriptor$Provides -java/util/ImmutableCollections$List12 -java/util/ImmutableCollections$AbstractImmutableList -java/lang/module/ModuleDescriptor$Version -java/util/ArrayList -java/lang/module/ModuleDescriptor$Modifier -java/lang/Enum +java/lang/module/ModuleDescriptor$Requires java/lang/module/ModuleDescriptor$Requires$Modifier -jdk/internal/module/ModuleTarget -jdk/internal/module/ModuleHashes -jdk/internal/module/ModuleResolution -java/lang/module/ModuleReference -jdk/internal/module/SystemModuleFinders$2 -java/util/function/Supplier -jdk/internal/module/ModuleReferenceImpl -java/util/KeyValueHolder -jdk/internal/module/SystemModuleFinders$SystemModuleFinder +java/lang/module/ModuleDescriptor$Version java/lang/module/ModuleFinder -jdk/internal/module/ModuleBootstrap$Counters -java/util/Optional -jdk/internal/loader/BootLoader -jdk/internal/module/ServicesCatalog -jdk/internal/loader/ClassLoaderValue -jdk/internal/loader/AbstractClassLoaderValue -jdk/internal/loader/ClassLoaders$BootClassLoader -java/lang/ClassLoader$ParallelLoaders -java/util/WeakHashMap -java/util/WeakHashMap$Entry -java/util/Collections$SetFromMap -java/util/WeakHashMap$KeySet -java/util/Vector -java/security/ProtectionDomain$JavaSecurityAccessImpl -jdk/internal/misc/JavaSecurityAccess -java/security/ProtectionDomain$Key -java/security/Principal -jdk/internal/loader/URLClassPath -java/net/URL$DefaultFactory -java/net/URLStreamHandlerFactory -java/net/URL$3 -jdk/internal/misc/JavaNetURLAccess -java/io/File$PathStatus -java/io/ExpiringCache$Entry -java/util/LinkedHashMap$Entry -sun/net/www/ParseUtil -sun/net/www/protocol/file/Handler -java/net/URLStreamHandler -sun/net/util/IPAddressUtil -java/util/ArrayDeque -java/util/Deque -java/util/Queue -jdk/internal/util/Preconditions -jdk/internal/loader/BuiltinClassLoader$LoadedModule -sun/net/www/protocol/jrt/Handler -java/util/ImmutableCollections$SetN$SetNIterator -java/lang/module/Configuration -java/util/ImmutableCollections$ListN +java/lang/module/ModuleFinder$1 +java/lang/module/ModuleFinder$2 +java/lang/module/ModuleReader +java/lang/module/ModuleReference java/lang/module/ResolvedModule -java/util/AbstractMap$1 -java/util/AbstractMap$1$1 -java/util/ImmutableCollections$MapN$1 -java/util/ImmutableCollections$MapN$MapNIterator -java/util/ImmutableCollections$Set12$1 -jdk/internal/module/ModuleLoaderMap -java/util/HashMap$TreeNode -jdk/internal/module/ModuleLoaderMap$Mapper -java/util/function/Function -java/lang/ModuleLayer -java/util/ImmutableCollections$ListItr -java/util/ListIterator -java/util/ArrayList$Itr -java/util/Collections$UnmodifiableSet -java/util/Collections$UnmodifiableCollection -java/util/Collections$UnmodifiableCollection$1 -java/util/concurrent/CopyOnWriteArrayList -jdk/internal/module/ServicesCatalog$ServiceProvider -java/util/HashMap$KeySet -java/util/HashMap$KeyIterator -java/util/HashMap$HashIterator -java/lang/ModuleLayer$Controller -jdk/internal/module/IllegalAccessLogger$Mode -jdk/internal/module/IllegalAccessLogger$Builder -java/util/HashMap$Values -java/util/HashMap$ValueIterator -jdk/internal/module/ModuleBootstrap$2 -java/util/Collections$UnmodifiableMap -jdk/internal/module/IllegalAccessLogger -sun/launcher/LauncherHelper -java/lang/StringCoding -java/lang/StringCoding$1 -java/lang/ThreadLocal$ThreadLocalMap -java/lang/ThreadLocal$ThreadLocalMap$Entry -jdk/internal/misc/TerminatingThreadLocal -java/lang/StringCoding$StringDecoder -sun/nio/cs/SingleByte$Decoder -sun/nio/cs/ArrayDecoder -java/nio/charset/CharsetDecoder -java/lang/StringCoding$Result -sun/net/util/URLUtil -java/util/Locale -java/util/Locale$Cache -sun/util/locale/LocaleObjectCache -sun/util/locale/BaseLocale -sun/util/locale/BaseLocale$Cache -sun/util/locale/BaseLocale$Key -sun/util/locale/LocaleObjectCache$CacheEntry -sun/util/locale/LocaleUtils -sun/util/locale/InternalLocaleBuilder -sun/util/locale/InternalLocaleBuilder$CaseInsensitiveChar -jdk/internal/loader/URLClassPath$3 -java/security/PrivilegedExceptionAction -jdk/internal/loader/URLClassPath$JarLoader -jdk/internal/loader/URLClassPath$Loader -java/util/zip/ZipFile -java/util/zip/ZipConstants -java/lang/invoke/LambdaMetafactory -java/lang/invoke/MethodHandles$Lookup -java/lang/invoke/MethodType$ConcurrentWeakInternSet -java/lang/invoke/MethodType$ConcurrentWeakInternSet$WeakEntry -java/lang/Void -java/lang/invoke/MethodTypeForm -java/lang/invoke/MethodHandles -java/lang/invoke/MemberName$Factory -java/lang/reflect/ReflectPermission -java/security/BasicPermission -java/security/Permission -java/security/Guard -sun/invoke/util/VerifyAccess -sun/invoke/util/Wrapper -sun/invoke/util/Wrapper$Format -java/lang/invoke/LambdaForm$NamedFunction -java/lang/invoke/DirectMethodHandle$Holder -sun/invoke/util/ValueConversions -java/lang/invoke/MethodHandleImpl -java/lang/invoke/Invokers -java/lang/invoke/LambdaForm$Kind -java/lang/NoSuchMethodException -java/lang/invoke/LambdaForm$BasicType -java/lang/invoke/LambdaForm$Name -java/lang/invoke/LambdaForm$Holder -java/lang/invoke/MethodHandleImpl$Intrinsic -java/lang/invoke/InvokerBytecodeGenerator -java/lang/invoke/InvokerBytecodeGenerator$2 -java/nio/CharBuffer -java/lang/Readable -java/nio/HeapCharBuffer -java/nio/charset/CoderResult -jdk/internal/org/objectweb/asm/ClassWriter -jdk/internal/org/objectweb/asm/ClassVisitor -jdk/internal/org/objectweb/asm/ByteVector -jdk/internal/org/objectweb/asm/Item -sun/invoke/util/BytecodeDescriptor -jdk/internal/org/objectweb/asm/MethodWriter -jdk/internal/org/objectweb/asm/MethodVisitor -jdk/internal/org/objectweb/asm/Type -jdk/internal/org/objectweb/asm/Label -jdk/internal/org/objectweb/asm/Frame -jdk/internal/org/objectweb/asm/AnnotationWriter -jdk/internal/org/objectweb/asm/AnnotationVisitor -java/lang/invoke/InvokerBytecodeGenerator$CpPatch -sun/invoke/util/VerifyType -sun/invoke/empty/Empty -sun/reflect/misc/ReflectUtil -java/lang/NoSuchMethodError -java/lang/IncompatibleClassChangeError -java/lang/invoke/BootstrapMethodInvoker -java/lang/invoke/Invokers$Holder -java/lang/invoke/MethodHandleImpl$1 -jdk/internal/misc/JavaLangInvokeAccess -java/lang/invoke/InnerClassLambdaMetafactory -java/lang/invoke/AbstractValidatingLambdaMetafactory -sun/security/action/GetBooleanAction -java/lang/invoke/InfoFromMemberName -java/lang/invoke/MethodHandleInfo -java/lang/invoke/InnerClassLambdaMetafactory$ForwardingMethodGenerator -java/lang/invoke/TypeConvertingMethodAdapter -java/lang/invoke/InnerClassLambdaMetafactory$1 -java/lang/invoke/BoundMethodHandle -java/lang/invoke/BoundMethodHandle$Specializer -java/lang/invoke/ClassSpecializer -java/lang/invoke/ClassSpecializer$1 -java/lang/invoke/BoundMethodHandle$SpeciesData -java/lang/invoke/ClassSpecializer$SpeciesData -java/util/ImmutableCollections$SubList -java/lang/invoke/BoundMethodHandle$Specializer$Factory -java/lang/invoke/ClassSpecializer$Factory -java/lang/invoke/SimpleMethodHandle -java/lang/NoSuchFieldException -java/lang/invoke/BoundMethodHandle$Species_L -java/lang/invoke/DirectMethodHandle$1 -java/lang/invoke/DirectMethodHandle$Accessor -sun/invoke/util/Wrapper$1 -java/lang/invoke/MethodHandleImpl$IntrinsicMethodHandle -java/lang/invoke/DelegatingMethodHandle -java/lang/invoke/DelegatingMethodHandle$Holder -java/lang/invoke/LambdaFormEditor -java/lang/invoke/LambdaFormEditor$Transform -java/lang/invoke/LambdaFormBuffer -jdk/internal/ref/CleanerFactory -jdk/internal/ref/CleanerFactory$1 -java/util/concurrent/ThreadFactory +java/lang/module/Resolver java/lang/ref/Cleaner java/lang/ref/Cleaner$1 -jdk/internal/ref/CleanerImpl -jdk/internal/ref/CleanerImpl$PhantomCleanableRef -jdk/internal/ref/PhantomCleanable java/lang/ref/Cleaner$Cleanable -jdk/internal/ref/CleanerImpl$WeakCleanableRef -jdk/internal/ref/WeakCleanable -jdk/internal/ref/CleanerImpl$SoftCleanableRef -jdk/internal/ref/SoftCleanable -jdk/internal/ref/CleanerImpl$CleanerCleanable -jdk/internal/ref/CleanerFactory$1$1 -jdk/internal/misc/InnocuousThread -jdk/internal/misc/InnocuousThread$3 -jdk/internal/misc/InnocuousThread$2 -java/util/zip/ZipFile$1 -jdk/internal/misc/JavaUtilZipFileAccess -sun/net/www/protocol/jar/Handler -jdk/internal/loader/URLClassPath$JarLoader$1 -jdk/internal/loader/FileURLMapper -java/util/jar/JarFile -java/util/jar/JavaUtilJarAccessImpl -jdk/internal/misc/JavaUtilJarAccess -java/lang/Runtime$Version -java/util/zip/ZipCoder -java/util/zip/ZipCoder$UTF8 -java/util/zip/ZipFile$CleanableResource -java/util/zip/ZipFile$Source -java/util/zip/ZipFile$Source$Key +java/lang/ref/FinalReference +java/lang/ref/Finalizer +java/lang/ref/Finalizer$FinalizerThread +java/lang/ref/PhantomReference +java/lang/ref/Reference +java/lang/ref/Reference$1 +java/lang/ref/Reference$ReferenceHandler +java/lang/ref/ReferenceQueue +java/lang/ref/ReferenceQueue$Lock +java/lang/ref/ReferenceQueue$Null +java/lang/ref/SoftReference +java/lang/ref/WeakReference +java/lang/reflect/AccessibleObject +java/lang/reflect/AnnotatedElement +java/lang/reflect/Array +java/lang/reflect/Constructor +java/lang/reflect/Executable +java/lang/reflect/Field +java/lang/reflect/GenericDeclaration +java/lang/reflect/Member +java/lang/reflect/Method +java/lang/reflect/Modifier +java/lang/reflect/Parameter +java/lang/reflect/RecordComponent +java/lang/reflect/ReflectAccess +java/lang/reflect/Type +java/math/BigInteger +java/math/RoundingMode +java/net/DefaultInterface +java/net/Inet4Address +java/net/Inet4AddressImpl +java/net/Inet6Address +java/net/Inet6Address$Inet6AddressHolder +java/net/Inet6AddressImpl +java/net/InetAddress +java/net/InetAddress$1 +java/net/InetAddress$InetAddressHolder +java/net/InetAddress$PlatformResolver +java/net/InetAddressImpl +java/net/InetAddressImplFactory +java/net/InterfaceAddress +java/net/NetworkInterface +java/net/URI +java/net/URI$1 +java/net/URI$Parser +java/net/URL +java/net/URL$3 +java/net/URL$DefaultFactory +java/net/URLClassLoader +java/net/URLStreamHandler +java/net/URLStreamHandlerFactory +java/net/spi/InetAddressResolver +java/net/spi/InetAddressResolver$LookupPolicy +java/nio/Bits +java/nio/Bits$1 +java/nio/Buffer +java/nio/Buffer$1 +java/nio/ByteBuffer +java/nio/ByteOrder +java/nio/CharBuffer +java/nio/DirectByteBuffer +java/nio/DirectByteBufferR +java/nio/DirectIntBufferRU +java/nio/DirectIntBufferU +java/nio/DirectLongBufferU +java/nio/HeapByteBuffer +java/nio/HeapCharBuffer +java/nio/IntBuffer +java/nio/LongBuffer +java/nio/MappedByteBuffer +java/nio/charset/Charset +java/nio/charset/CharsetDecoder +java/nio/charset/CharsetEncoder +java/nio/charset/CoderResult +java/nio/charset/CodingErrorAction +java/nio/charset/StandardCharsets +java/nio/charset/spi/CharsetProvider +java/nio/file/CopyOption +java/nio/file/FileSystem java/nio/file/FileSystems java/nio/file/FileSystems$DefaultFileSystemHolder java/nio/file/FileSystems$DefaultFileSystemHolder$1 -sun/nio/fs/DefaultFileSystemProvider -sun/nio/fs/WindowsFileSystemProvider -sun/nio/fs/AbstractFileSystemProvider -java/nio/file/spi/FileSystemProvider -java/nio/file/StandardOpenOption +java/nio/file/Files +java/nio/file/LinkOption java/nio/file/OpenOption -sun/nio/fs/WindowsFileSystem -java/nio/file/FileSystem -java/util/Arrays$ArrayList -java/util/Arrays$ArrayItr -sun/nio/fs/WindowsPathParser -sun/nio/fs/WindowsPathType -sun/nio/fs/WindowsPathParser$Result -java/net/URI$Parser -sun/nio/fs/WindowsPath java/nio/file/Path +java/nio/file/Paths +java/nio/file/StandardOpenOption java/nio/file/Watchable -java/nio/file/attribute/BasicFileAttributes -java/nio/file/LinkOption -java/nio/file/CopyOption -java/nio/file/Files -java/nio/file/attribute/BasicFileAttributeView -java/nio/file/attribute/FileAttributeView java/nio/file/attribute/AttributeView -sun/nio/fs/Util -sun/nio/fs/WindowsFileAttributeViews -sun/nio/fs/WindowsFileAttributeViews$Basic -sun/nio/fs/AbstractBasicFileAttributeView -sun/nio/fs/DynamicFileAttributeView -sun/nio/fs/WindowsFileAttributes +java/nio/file/attribute/BasicFileAttributeView +java/nio/file/attribute/BasicFileAttributes java/nio/file/attribute/DosFileAttributes -sun/nio/fs/NativeBuffers -sun/nio/fs/NativeBuffers$1 -jdk/internal/misc/TerminatingThreadLocal$1 -java/util/IdentityHashMap -java/util/IdentityHashMap$KeySet -sun/nio/fs/NativeBuffer -sun/nio/fs/NativeBuffer$Deallocator -sun/nio/fs/WindowsNativeDispatcher -sun/nio/fs/WindowsNativeDispatcher$1 -java/lang/ClassLoader$2 -java/lang/ClassLoader$NativeLibrary -java/util/ArrayDeque$DeqIterator -java/util/concurrent/ConcurrentHashMap$ValuesView -java/util/concurrent/ConcurrentHashMap$ValueIterator -java/util/Enumeration -sun/nio/fs/WindowsNativeDispatcher$FirstFile -sun/nio/fs/WindowsNativeDispatcher$FirstStream -sun/nio/fs/WindowsNativeDispatcher$VolumeInformation -sun/nio/fs/WindowsNativeDispatcher$DiskFreeSpace -sun/nio/fs/WindowsNativeDispatcher$Account -sun/nio/fs/WindowsNativeDispatcher$AclInformation -sun/nio/fs/WindowsNativeDispatcher$CompletionStatus -java/util/concurrent/TimeUnit +java/nio/file/attribute/FileAttributeView java/nio/file/attribute/FileTime -java/io/RandomAccessFile -java/io/DataOutput -java/io/DataInput -java/io/RandomAccessFile$2 -jdk/internal/misc/JavaIORandomAccessFileAccess -java/util/concurrent/atomic/AtomicBoolean -java/lang/invoke/VarHandles -java/lang/invoke/VarHandleInts$FieldInstanceReadWrite -java/lang/invoke/VarHandleInts$FieldInstanceReadOnly -java/lang/invoke/VarHandle$1 -jdk/internal/util/Preconditions$1 -java/util/function/BiFunction -java/lang/invoke/VarHandleGuards -java/lang/invoke/VarForm -java/lang/invoke/VarHandle$AccessType -java/lang/invoke/VarHandle$AccessMode -java/io/FileCleanable -java/util/zip/ZipFile$Source$End -java/util/zip/ZipUtils -jdk/internal/perf/PerfCounter -jdk/internal/perf/Perf$GetPerfAction -jdk/internal/perf/Perf -jdk/internal/perf/PerfCounter$CoreCounters -sun/nio/ch/DirectBuffer -java/nio/DirectByteBuffer -java/nio/MappedByteBuffer -java/nio/Bits -java/util/concurrent/atomic/AtomicLong -java/nio/Bits$1 -jdk/internal/misc/JavaNioAccess$BufferPool -java/nio/DirectLongBufferU -java/nio/LongBuffer -jdk/internal/util/jar/JarIndex -java/util/jar/JarFile$1 -java/util/jar/JarFile$JarFileEntry -java/util/jar/JarEntry -java/util/zip/ZipEntry -java/util/zip/ZipFile$ZipFileInputStream -java/util/zip/ZipFile$ZipFileInflaterInputStream -java/util/zip/InflaterInputStream -java/util/zip/Inflater -java/util/zip/Inflater$InflaterZStreamRef -java/util/zip/ZipFile$InflaterCleanupAction -jdk/internal/loader/URLClassPath$JarLoader$2 -jdk/internal/loader/Resource +java/nio/file/spi/FileSystemProvider +java/security/AccessControlContext +java/security/AccessController +java/security/AllPermission +java/security/BasicPermission +java/security/BasicPermissionCollection +java/security/CodeSigner +java/security/CodeSource +java/security/Guard +java/security/Permission +java/security/PermissionCollection +java/security/Permissions +java/security/Principal +java/security/PrivilegedAction +java/security/PrivilegedExceptionAction +java/security/ProtectionDomain +java/security/ProtectionDomain$JavaSecurityAccessImpl +java/security/ProtectionDomain$Key +java/security/SecureClassLoader +java/security/SecureClassLoader$1 +java/security/SecureClassLoader$CodeSourceKey +java/security/SecureClassLoader$DebugHolder +java/security/Security +java/security/Security$1 +java/security/UnresolvedPermission +java/security/cert/Certificate +java/text/AttributedCharacterIterator$Attribute +java/text/DateFormat +java/text/DateFormat$Field +java/text/DateFormatSymbols +java/text/DecimalFormat +java/text/DecimalFormatSymbols +java/text/DigitList +java/text/DontCareFieldPosition +java/text/DontCareFieldPosition$1 +java/text/FieldPosition +java/text/Format +java/text/Format$Field +java/text/Format$FieldDelegate +java/text/NumberFormat +java/text/NumberFormat$Field +java/text/SimpleDateFormat +java/text/spi/BreakIteratorProvider +java/text/spi/CollatorProvider +java/text/spi/DateFormatProvider +java/text/spi/DateFormatSymbolsProvider +java/text/spi/DecimalFormatSymbolsProvider +java/text/spi/NumberFormatProvider +java/time/Clock +java/time/Clock$SystemClock +java/time/Duration +java/time/Instant +java/time/InstantSource +java/time/LocalDate +java/time/LocalDate$1 +java/time/LocalDateTime +java/time/LocalTime +java/time/LocalTime$1 +java/time/Period +java/time/ZoneId +java/time/ZoneOffset +java/time/ZoneRegion +java/time/chrono/AbstractChronology +java/time/chrono/ChronoLocalDate +java/time/chrono/ChronoLocalDateTime +java/time/chrono/ChronoPeriod +java/time/chrono/Chronology +java/time/chrono/IsoChronology +java/time/format/DateTimeFormatter +java/time/format/DateTimeFormatterBuilder +java/time/format/DateTimeFormatterBuilder$1 +java/time/format/DateTimeFormatterBuilder$2 +java/time/format/DateTimeFormatterBuilder$CharLiteralPrinterParser +java/time/format/DateTimeFormatterBuilder$CompositePrinterParser +java/time/format/DateTimeFormatterBuilder$DateTimePrinterParser +java/time/format/DateTimeFormatterBuilder$InstantPrinterParser +java/time/format/DateTimeFormatterBuilder$NanosPrinterParser +java/time/format/DateTimeFormatterBuilder$NumberPrinterParser +java/time/format/DateTimeFormatterBuilder$OffsetIdPrinterParser +java/time/format/DateTimeFormatterBuilder$SettingsParser +java/time/format/DateTimeFormatterBuilder$StringLiteralPrinterParser +java/time/format/DateTimeFormatterBuilder$TextPrinterParser +java/time/format/DateTimeFormatterBuilder$ZoneIdPrinterParser +java/time/format/DateTimePrintContext +java/time/format/DateTimeTextProvider +java/time/format/DateTimeTextProvider$1 +java/time/format/DateTimeTextProvider$LocaleStore +java/time/format/DecimalStyle +java/time/format/ResolverStyle +java/time/format/SignStyle +java/time/format/TextStyle +java/time/temporal/ChronoField +java/time/temporal/ChronoUnit +java/time/temporal/IsoFields +java/time/temporal/IsoFields$Field +java/time/temporal/IsoFields$Field$1 +java/time/temporal/IsoFields$Field$2 +java/time/temporal/IsoFields$Field$3 +java/time/temporal/IsoFields$Field$4 +java/time/temporal/IsoFields$Unit +java/time/temporal/JulianFields +java/time/temporal/JulianFields$Field +java/time/temporal/Temporal +java/time/temporal/TemporalAccessor +java/time/temporal/TemporalAdjuster +java/time/temporal/TemporalAmount +java/time/temporal/TemporalField +java/time/temporal/TemporalQueries +java/time/temporal/TemporalQueries$1 +java/time/temporal/TemporalQueries$2 +java/time/temporal/TemporalQueries$3 +java/time/temporal/TemporalQueries$4 +java/time/temporal/TemporalQueries$5 +java/time/temporal/TemporalQueries$6 +java/time/temporal/TemporalQueries$7 +java/time/temporal/TemporalQuery +java/time/temporal/TemporalUnit +java/time/temporal/ValueRange +java/time/zone/ZoneOffsetTransitionRule +java/time/zone/ZoneRules +java/util/AbstractCollection +java/util/AbstractList +java/util/AbstractList$RandomAccessSpliterator +java/util/AbstractMap +java/util/AbstractMap$SimpleImmutableEntry +java/util/AbstractSet +java/util/ArrayDeque +java/util/ArrayDeque$DeqIterator +java/util/ArrayList +java/util/ArrayList$ArrayListSpliterator +java/util/ArrayList$Itr +java/util/ArrayList$SubList +java/util/Arrays +java/util/Arrays$ArrayItr +java/util/Arrays$ArrayList +java/util/Arrays$LegacyMergeSort +java/util/Calendar +java/util/Calendar$Builder +java/util/Collection +java/util/Collections +java/util/Collections$1 +java/util/Collections$3 +java/util/Collections$EmptyEnumeration +java/util/Collections$EmptyIterator +java/util/Collections$EmptyList +java/util/Collections$EmptyMap +java/util/Collections$EmptySet +java/util/Collections$SetFromMap +java/util/Collections$SingletonMap +java/util/Collections$SingletonSet +java/util/Collections$SynchronizedCollection +java/util/Collections$SynchronizedMap +java/util/Collections$SynchronizedSet +java/util/Collections$UnmodifiableCollection +java/util/Collections$UnmodifiableCollection$1 +java/util/Collections$UnmodifiableList +java/util/Collections$UnmodifiableRandomAccessList +java/util/Collections$UnmodifiableSet +java/util/Comparator +java/util/Date +java/util/Deque +java/util/Dictionary +java/util/EnumMap +java/util/EnumMap$1 +java/util/EnumSet +java/util/Enumeration +java/util/Formattable +java/util/Formatter +java/util/Formatter$Conversion +java/util/Formatter$Flags +java/util/Formatter$FormatSpecifier +java/util/Formatter$FormatString +java/util/GregorianCalendar +java/util/HashMap +java/util/HashMap$EntryIterator +java/util/HashMap$EntrySet +java/util/HashMap$HashIterator +java/util/HashMap$HashMapSpliterator +java/util/HashMap$KeyIterator +java/util/HashMap$KeySet +java/util/HashMap$KeySpliterator +java/util/HashMap$Node +java/util/HashMap$TreeNode +java/util/HashMap$ValueIterator +java/util/HashMap$ValueSpliterator +java/util/HashMap$Values +java/util/HashSet +java/util/Hashtable +java/util/Hashtable$Entry +java/util/Hashtable$Enumerator +java/util/HexFormat +java/util/IdentityHashMap +java/util/IdentityHashMap$IdentityHashMapIterator +java/util/IdentityHashMap$KeyIterator +java/util/IdentityHashMap$KeySet +java/util/IdentityHashMap$Values +java/util/ImmutableCollections +java/util/ImmutableCollections$AbstractImmutableCollection +java/util/ImmutableCollections$AbstractImmutableList +java/util/ImmutableCollections$AbstractImmutableMap +java/util/ImmutableCollections$AbstractImmutableSet +java/util/ImmutableCollections$List12 +java/util/ImmutableCollections$ListItr +java/util/ImmutableCollections$ListN +java/util/ImmutableCollections$Map1 +java/util/ImmutableCollections$MapN +java/util/ImmutableCollections$MapN$1 +java/util/ImmutableCollections$MapN$MapNIterator +java/util/ImmutableCollections$Set12 +java/util/ImmutableCollections$Set12$1 +java/util/ImmutableCollections$SetN +java/util/ImmutableCollections$SetN$SetNIterator +java/util/Iterator +java/util/KeyValueHolder +java/util/LinkedHashMap +java/util/LinkedHashMap$Entry +java/util/LinkedHashMap$LinkedEntryIterator +java/util/LinkedHashMap$LinkedEntrySet +java/util/LinkedHashMap$LinkedHashIterator +java/util/LinkedHashSet +java/util/List +java/util/ListIterator +java/util/ListResourceBundle +java/util/Locale +java/util/Locale$Builder +java/util/Locale$Cache +java/util/Locale$Category +java/util/Map +java/util/Map$Entry +java/util/NavigableMap +java/util/NavigableSet +java/util/Objects +java/util/Optional +java/util/OptionalInt +java/util/Properties +java/util/Properties$EntrySet +java/util/Properties$LineReader +java/util/Queue +java/util/Random +java/util/RandomAccess +java/util/RegularEnumSet +java/util/ResourceBundle +java/util/ResourceBundle$1 +java/util/ResourceBundle$2 +java/util/ResourceBundle$Control +java/util/ResourceBundle$Control$CandidateListCache +java/util/ResourceBundle$NoFallbackControl +java/util/ResourceBundle$ResourceBundleProviderHelper +java/util/ResourceBundle$SingleFormatControl +java/util/ServiceLoader +java/util/ServiceLoader$1 +java/util/ServiceLoader$2 +java/util/ServiceLoader$3 +java/util/ServiceLoader$LazyClassPathLookupIterator +java/util/ServiceLoader$ModuleServicesLookupIterator +java/util/ServiceLoader$Provider +java/util/ServiceLoader$ProviderImpl +java/util/Set +java/util/SortedMap +java/util/SortedSet +java/util/Spliterator +java/util/Spliterator$OfDouble +java/util/Spliterator$OfInt +java/util/Spliterator$OfLong +java/util/Spliterator$OfPrimitive +java/util/Spliterators +java/util/Spliterators$1Adapter +java/util/Spliterators$AbstractSpliterator +java/util/Spliterators$ArraySpliterator +java/util/Spliterators$EmptySpliterator +java/util/Spliterators$EmptySpliterator$OfDouble +java/util/Spliterators$EmptySpliterator$OfInt +java/util/Spliterators$EmptySpliterator$OfLong +java/util/Spliterators$EmptySpliterator$OfRef +java/util/Spliterators$IteratorSpliterator +java/util/StringJoiner +java/util/StringTokenizer +java/util/TimSort +java/util/TimeZone +java/util/TreeMap +java/util/TreeMap$Entry +java/util/TreeMap$EntryIterator +java/util/TreeMap$EntrySet +java/util/TreeMap$PrivateEntryIterator +java/util/WeakHashMap +java/util/WeakHashMap$Entry +java/util/WeakHashMap$KeySet +java/util/concurrent/AbstractExecutorService +java/util/concurrent/ConcurrentHashMap +java/util/concurrent/ConcurrentHashMap$BaseIterator +java/util/concurrent/ConcurrentHashMap$CollectionView +java/util/concurrent/ConcurrentHashMap$CounterCell +java/util/concurrent/ConcurrentHashMap$EntryIterator +java/util/concurrent/ConcurrentHashMap$EntrySetView +java/util/concurrent/ConcurrentHashMap$ForwardingNode +java/util/concurrent/ConcurrentHashMap$KeyIterator +java/util/concurrent/ConcurrentHashMap$KeySetView +java/util/concurrent/ConcurrentHashMap$MapEntry +java/util/concurrent/ConcurrentHashMap$Node +java/util/concurrent/ConcurrentHashMap$ReservationNode +java/util/concurrent/ConcurrentHashMap$Segment +java/util/concurrent/ConcurrentHashMap$Traverser +java/util/concurrent/ConcurrentHashMap$ValueIterator +java/util/concurrent/ConcurrentHashMap$ValuesView +java/util/concurrent/ConcurrentMap +java/util/concurrent/ConcurrentNavigableMap +java/util/concurrent/ConcurrentSkipListMap +java/util/concurrent/ConcurrentSkipListMap$Index +java/util/concurrent/ConcurrentSkipListMap$Node +java/util/concurrent/ConcurrentSkipListSet +java/util/concurrent/CopyOnWriteArrayList +java/util/concurrent/CopyOnWriteArrayList$COWIterator +java/util/concurrent/CountedCompleter +java/util/concurrent/Executor +java/util/concurrent/ExecutorService +java/util/concurrent/ForkJoinPool +java/util/concurrent/ForkJoinPool$1 +java/util/concurrent/ForkJoinPool$DefaultCommonPoolForkJoinWorkerThreadFactory +java/util/concurrent/ForkJoinPool$DefaultCommonPoolForkJoinWorkerThreadFactory$1 +java/util/concurrent/ForkJoinPool$DefaultForkJoinWorkerThreadFactory +java/util/concurrent/ForkJoinPool$ForkJoinWorkerThreadFactory +java/util/concurrent/ForkJoinPool$WorkQueue +java/util/concurrent/ForkJoinTask +java/util/concurrent/ForkJoinTask$Aux +java/util/concurrent/ForkJoinWorkerThread +java/util/concurrent/Future +java/util/concurrent/ThreadFactory +java/util/concurrent/ThreadLocalRandom +java/util/concurrent/TimeUnit +java/util/concurrent/atomic/AtomicInteger +java/util/concurrent/atomic/AtomicLong +java/util/concurrent/atomic/LongAdder +java/util/concurrent/atomic/Striped64 +java/util/concurrent/locks/AbstractOwnableSynchronizer +java/util/concurrent/locks/AbstractQueuedSynchronizer +java/util/concurrent/locks/Lock +java/util/concurrent/locks/LockSupport +java/util/concurrent/locks/ReentrantLock +java/util/concurrent/locks/ReentrantLock$NonfairSync +java/util/concurrent/locks/ReentrantLock$Sync +java/util/function/BiConsumer +java/util/function/BiFunction +java/util/function/BinaryOperator +java/util/function/Consumer +java/util/function/Function +java/util/function/IntConsumer +java/util/function/IntFunction +java/util/function/IntPredicate +java/util/function/Predicate +java/util/function/Supplier java/util/jar/Attributes -java/util/jar/Manifest$FastInputStream java/util/jar/Attributes$Name -java/lang/Package -java/lang/NamedPackage -java/lang/Package$VersionInfo -sun/nio/ByteBuffered -java/security/SecureClassLoader$CodeSourceKey -java/security/SecureClassLoader$1 -sun/security/util/LazyCodeSourcePermissionCollection -java/security/PermissionCollection -java/security/Permissions -java/lang/RuntimePermission -java/security/Permissions$1 -java/security/BasicPermissionCollection -java/security/AllPermission -java/security/UnresolvedPermission -java/security/SecureClassLoader$DebugHolder -sun/security/util/Debug -java/time/temporal/TemporalAccessor -java/lang/PublicMethods$MethodList -java/lang/PublicMethods$Key -java/util/logging/Logger +java/util/jar/JarEntry +java/util/jar/JarFile +java/util/jar/JarFile$JarFileEntry +java/util/jar/JarVerifier +java/util/jar/JavaUtilJarAccessImpl +java/util/jar/Manifest +java/util/jar/Manifest$FastInputStream java/util/logging/Handler java/util/logging/Level java/util/logging/Level$KnownLevel -java/util/logging/Logger$LoggerBundle -java/util/logging/Logger$ConfigurationData java/util/logging/LogManager java/util/logging/LogManager$1 -java/util/logging/LogManager$SystemLoggerContext -java/util/logging/LogManager$LoggerContext -java/util/logging/LogManager$LogNode -java/util/concurrent/locks/ReentrantLock$NonfairSync -java/util/concurrent/locks/ReentrantLock$Sync -java/util/concurrent/locks/AbstractQueuedSynchronizer -java/util/concurrent/locks/AbstractQueuedSynchronizer$Node -java/lang/invoke/VarHandleObjects$FieldInstanceReadWrite -java/lang/invoke/VarHandleObjects$FieldInstanceReadOnly -java/util/Collections$SynchronizedMap +java/util/logging/LogManager$2 +java/util/logging/LogManager$4 java/util/logging/LogManager$Cleaner -java/lang/ApplicationShutdownHooks -java/lang/ApplicationShutdownHooks$1 -java/lang/Shutdown -java/lang/Shutdown$Lock -java/util/logging/LoggingPermission +java/util/logging/LogManager$LogNode +java/util/logging/LogManager$LoggerContext +java/util/logging/LogManager$LoggerContext$1 +java/util/logging/LogManager$LoggerWeakRef java/util/logging/LogManager$LoggingProviderAccess -sun/util/logging/internal/LoggingProviderImpl$LogManagerAccess -java/security/AccessController$1 -sun/security/util/SecurityConstants -java/net/NetPermission -java/security/SecurityPermission -java/net/SocketPermission -java/security/AllPermissionCollection -sun/security/util/FilePermCompat -sun/security/util/SecurityProperties -java/security/Security -java/security/Security$1 -java/util/Properties$LineReader -java/util/concurrent/ConcurrentHashMap$ForwardingNode -java/io/FileInputStream$1 -java/io/FilePermission -sun/util/logging/internal/LoggingProviderImpl -jdk/internal/logger/DefaultLoggerFinder -java/lang/System$LoggerFinder -java/lang/invoke/VarHandle$AccessDescriptor -java/util/logging/LogManager$2 java/util/logging/LogManager$RootLogger -java/nio/file/Paths -java/util/logging/LogManager$LoggerWeakRef -java/lang/invoke/StringConcatFactory -java/lang/invoke/StringConcatFactory$Strategy -java/lang/invoke/MethodHandleImpl$AsVarargsCollector -java/lang/invoke/StringConcatFactory$1 -java/lang/invoke/StringConcatFactory$Mode -java/lang/invoke/StringConcatFactory$Recipe -java/lang/invoke/StringConcatFactory$RecipeElement -java/lang/invoke/StringConcatFactory$MethodHandleInlineCopyStrategy -java/lang/invoke/StringConcatFactory$MethodHandleInlineCopyStrategy$1 -java/lang/invoke/StringConcatFactory$MethodHandleInlineCopyStrategy$2 -java/lang/invoke/StringConcatFactory$MethodHandleInlineCopyStrategy$3 -java/lang/StringConcatHelper -java/lang/invoke/StringConcatFactory$Stringifiers -java/lang/invoke/StringConcatFactory$Stringifiers$StringifierMost -java/lang/ClassValue -java/lang/ClassValue$Entry -java/lang/ClassValue$Identity -java/lang/ClassValue$Version -java/lang/invoke/StringConcatFactory$Stringifiers$StringifierAny -java/lang/ClassValue$ClassValueMap -jdk/internal/org/objectweb/asm/FieldWriter -jdk/internal/org/objectweb/asm/FieldVisitor -java/lang/invoke/ClassSpecializer$Factory$1Var -java/util/Collections$UnmodifiableRandomAccessList -java/util/Collections$UnmodifiableList -java/lang/Byte$ByteCache -java/lang/invoke/MethodHandles$1 -sun/invoke/util/ValueConversions$WrapperCache +java/util/logging/LogManager$SystemLoggerContext java/util/logging/LogManager$VisitedLoggers -java/util/function/Predicate -java/util/logging/LogManager$LoggerContext$1 -java/util/concurrent/ConcurrentHashMap$KeySetView -java/util/Collections$3 -java/util/concurrent/ConcurrentHashMap$KeyIterator -java/util/Hashtable$Enumerator -java/util/ArrayList$ArrayListSpliterator -java/util/Spliterator -java/util/stream/StreamSupport -java/util/stream/ReferencePipeline$Head -java/util/stream/ReferencePipeline -java/util/stream/Stream -java/util/stream/BaseStream +java/util/logging/Logger +java/util/logging/Logger$ConfigurationData +java/util/logging/Logger$LoggerBundle +java/util/logging/Logger$SystemLoggerHelper +java/util/logging/Logger$SystemLoggerHelper$1 +java/util/logging/LoggingPermission +java/util/random/RandomGenerator +java/util/regex/ASCII +java/util/regex/CharPredicates +java/util/regex/IntHashSet +java/util/regex/MatchResult +java/util/regex/Matcher +java/util/regex/Pattern +java/util/regex/Pattern$BackRef +java/util/regex/Pattern$Begin +java/util/regex/Pattern$BitClass +java/util/regex/Pattern$BmpCharPredicate +java/util/regex/Pattern$BmpCharProperty +java/util/regex/Pattern$BmpCharPropertyGreedy +java/util/regex/Pattern$Branch +java/util/regex/Pattern$BranchConn +java/util/regex/Pattern$CharPredicate +java/util/regex/Pattern$CharProperty +java/util/regex/Pattern$CharPropertyGreedy +java/util/regex/Pattern$Curly +java/util/regex/Pattern$Dollar +java/util/regex/Pattern$First +java/util/regex/Pattern$GroupCurly +java/util/regex/Pattern$GroupHead +java/util/regex/Pattern$GroupTail +java/util/regex/Pattern$LastNode +java/util/regex/Pattern$Node +java/util/regex/Pattern$Qtype +java/util/regex/Pattern$Ques +java/util/regex/Pattern$Slice +java/util/regex/Pattern$SliceNode +java/util/regex/Pattern$Start +java/util/regex/Pattern$StartS +java/util/regex/Pattern$TreeInfo +java/util/spi/CalendarDataProvider +java/util/spi/CurrencyNameProvider +java/util/spi/LocaleNameProvider +java/util/spi/LocaleServiceProvider +java/util/spi/TimeZoneNameProvider java/util/stream/AbstractPipeline +java/util/stream/AbstractTask +java/util/stream/BaseStream +java/util/stream/Collector +java/util/stream/Collector$Characteristics +java/util/stream/Collectors +java/util/stream/Collectors$CollectorImpl +java/util/stream/Collectors$Partition +java/util/stream/Collectors$Partition$1 +java/util/stream/DistinctOps +java/util/stream/DistinctOps$1 +java/util/stream/DistinctOps$1$2 +java/util/stream/FindOps +java/util/stream/FindOps$FindOp +java/util/stream/FindOps$FindSink +java/util/stream/FindOps$FindSink$OfInt +java/util/stream/FindOps$FindSink$OfRef +java/util/stream/ForEachOps +java/util/stream/ForEachOps$ForEachOp +java/util/stream/ForEachOps$ForEachOp$OfRef +java/util/stream/IntPipeline +java/util/stream/IntPipeline$10 +java/util/stream/IntPipeline$10$1 +java/util/stream/IntPipeline$Head +java/util/stream/IntPipeline$StatelessOp +java/util/stream/IntStream java/util/stream/PipelineHelper -java/util/stream/StreamOpFlag -java/util/stream/StreamOpFlag$Type -java/util/stream/StreamOpFlag$MaskBuilder -java/util/EnumMap -java/util/EnumMap$1 -java/lang/Class$3 -java/util/HashMap$EntrySet -java/util/HashMap$EntryIterator -sun/reflect/annotation/AnnotationParser -jdk/internal/reflect/NativeMethodAccessorImpl -jdk/internal/reflect/DelegatingMethodAccessorImpl +java/util/stream/ReduceOps +java/util/stream/ReduceOps$3 +java/util/stream/ReduceOps$3ReducingSink +java/util/stream/ReduceOps$AccumulatingSink +java/util/stream/ReduceOps$Box +java/util/stream/ReduceOps$ReduceOp +java/util/stream/ReduceOps$ReduceTask +java/util/stream/ReferencePipeline +java/util/stream/ReferencePipeline$2 +java/util/stream/ReferencePipeline$2$1 java/util/stream/ReferencePipeline$3 -java/util/stream/ReferencePipeline$StatelessOp -java/util/stream/StreamShape +java/util/stream/ReferencePipeline$3$1 java/util/stream/ReferencePipeline$7 -java/util/stream/FindOps -java/util/stream/FindOps$FindSink$OfRef -java/util/stream/FindOps$FindSink -java/util/stream/TerminalSink -java/util/stream/Sink -java/util/function/Consumer -java/util/stream/FindOps$FindOp -java/util/stream/TerminalOp -java/lang/invoke/DirectMethodHandle$Constructor java/util/stream/ReferencePipeline$7$1 +java/util/stream/ReferencePipeline$Head +java/util/stream/ReferencePipeline$StatefulOp +java/util/stream/ReferencePipeline$StatelessOp +java/util/stream/Sink +java/util/stream/Sink$ChainedInt java/util/stream/Sink$ChainedReference -java/util/stream/ReferencePipeline$3$1 -java/util/stream/Streams$StreamBuilderImpl +java/util/stream/Sink$OfInt +java/util/stream/Stream java/util/stream/Stream$Builder -java/util/stream/Streams$AbstractStreamBuilderImpl +java/util/stream/StreamOpFlag +java/util/stream/StreamOpFlag$MaskBuilder +java/util/stream/StreamOpFlag$Type +java/util/stream/StreamShape +java/util/stream/StreamSupport java/util/stream/Streams -java/util/IdentityHashMap$Values -jdk/internal/logger/BootstrapLogger -java/lang/System$Logger -sun/util/logging/PlatformLogger$Bridge -sun/util/logging/PlatformLogger$ConfigurableBridge -jdk/internal/logger/BootstrapLogger$DetectBackend -jdk/internal/logger/BootstrapLogger$DetectBackend$1 -java/util/ServiceLoader -java/util/ServiceLoader$ModuleServicesLookupIterator -java/util/Spliterators -java/util/Spliterators$EmptySpliterator$OfRef -java/util/Spliterators$EmptySpliterator -java/util/Spliterators$EmptySpliterator$OfInt -java/util/Spliterator$OfInt -java/util/Spliterator$OfPrimitive -java/util/Spliterators$EmptySpliterator$OfLong -java/util/Spliterator$OfLong -java/util/Spliterators$EmptySpliterator$OfDouble -java/util/Spliterator$OfDouble -java/util/Spliterators$1Adapter -java/util/ServiceLoader$LazyClassPathLookupIterator -java/util/ServiceLoader$2 -java/util/ServiceLoader$3 -jdk/internal/loader/AbstractClassLoaderValue$Memoizer -jdk/internal/module/Resources -jdk/internal/loader/BuiltinClassLoader$2 -jdk/internal/loader/BuiltinClassLoader$5 -jdk/internal/module/SystemModuleFinders$SystemModuleReader -java/lang/module/ModuleReader -jdk/internal/module/SystemModuleFinders$SystemImage -jdk/internal/jimage/ImageReaderFactory -jdk/internal/jimage/ImageReaderFactory$1 -jdk/internal/jimage/ImageReader -jdk/internal/jimage/ImageReader$SharedImageReader +java/util/stream/Streams$AbstractStreamBuilderImpl +java/util/stream/Streams$StreamBuilderImpl +java/util/stream/TerminalOp +java/util/stream/TerminalSink +java/util/zip/CRC32 +java/util/zip/Checksum +java/util/zip/Checksum$1 +java/util/zip/Inflater +java/util/zip/Inflater$InflaterZStreamRef +java/util/zip/InflaterInputStream +java/util/zip/ZipCoder +java/util/zip/ZipCoder$UTF8ZipCoder +java/util/zip/ZipConstants +java/util/zip/ZipEntry +java/util/zip/ZipFile +java/util/zip/ZipFile$1 +java/util/zip/ZipFile$CleanableResource +java/util/zip/ZipFile$EntrySpliterator +java/util/zip/ZipFile$InflaterCleanupAction +java/util/zip/ZipFile$Source +java/util/zip/ZipFile$Source$End +java/util/zip/ZipFile$Source$Key +java/util/zip/ZipFile$ZipFileInflaterInputStream +java/util/zip/ZipFile$ZipFileInputStream +java/util/zip/ZipUtils +jdk/internal/access/JavaIOFileDescriptorAccess +jdk/internal/access/JavaIORandomAccessFileAccess +jdk/internal/access/JavaLangAccess +jdk/internal/access/JavaLangInvokeAccess +jdk/internal/access/JavaLangModuleAccess +jdk/internal/access/JavaLangRefAccess +jdk/internal/access/JavaLangReflectAccess +jdk/internal/access/JavaNetInetAddressAccess +jdk/internal/access/JavaNetURLAccess +jdk/internal/access/JavaNetUriAccess +jdk/internal/access/JavaNioAccess +jdk/internal/access/JavaSecurityAccess +jdk/internal/access/JavaUtilJarAccess +jdk/internal/access/JavaUtilResourceBundleAccess +jdk/internal/access/JavaUtilZipFileAccess +jdk/internal/access/SharedSecrets +jdk/internal/invoke/NativeEntryPoint jdk/internal/jimage/BasicImageReader jdk/internal/jimage/BasicImageReader$1 -jdk/internal/jimage/NativeImageBuffer -jdk/internal/jimage/NativeImageBuffer$1 jdk/internal/jimage/ImageHeader -java/nio/DirectIntBufferU -java/nio/IntBuffer -java/nio/DirectByteBufferR -java/nio/DirectIntBufferRU -jdk/internal/jimage/ImageStringsReader +jdk/internal/jimage/ImageLocation +jdk/internal/jimage/ImageReader +jdk/internal/jimage/ImageReader$SharedImageReader +jdk/internal/jimage/ImageReaderFactory +jdk/internal/jimage/ImageReaderFactory$1 jdk/internal/jimage/ImageStrings +jdk/internal/jimage/ImageStringsReader +jdk/internal/jimage/NativeImageBuffer +jdk/internal/jimage/NativeImageBuffer$1 jdk/internal/jimage/decompressor/Decompressor -jdk/internal/jimage/ImageLocation -java/util/Collections$EmptyIterator -java/util/Collections$EmptyEnumeration +jdk/internal/loader/AbstractClassLoaderValue +jdk/internal/loader/AbstractClassLoaderValue$Memoizer +jdk/internal/loader/ArchivedClassLoaders +jdk/internal/loader/BootLoader +jdk/internal/loader/BuiltinClassLoader jdk/internal/loader/BuiltinClassLoader$1 -java/lang/CompoundEnumeration +jdk/internal/loader/BuiltinClassLoader$2 +jdk/internal/loader/BuiltinClassLoader$5 +jdk/internal/loader/BuiltinClassLoader$LoadedModule +jdk/internal/loader/ClassLoaderHelper +jdk/internal/loader/ClassLoaderValue +jdk/internal/loader/ClassLoaders +jdk/internal/loader/ClassLoaders$AppClassLoader +jdk/internal/loader/ClassLoaders$BootClassLoader +jdk/internal/loader/ClassLoaders$PlatformClassLoader +jdk/internal/loader/FileURLMapper +jdk/internal/loader/NativeLibraries +jdk/internal/loader/NativeLibraries$1 +jdk/internal/loader/NativeLibraries$2 +jdk/internal/loader/NativeLibraries$3 +jdk/internal/loader/NativeLibraries$CountedLock +jdk/internal/loader/NativeLibraries$LibraryPaths +jdk/internal/loader/NativeLibraries$NativeLibraryContext +jdk/internal/loader/NativeLibraries$NativeLibraryContext$1 +jdk/internal/loader/NativeLibraries$NativeLibraryImpl +jdk/internal/loader/NativeLibrary +jdk/internal/loader/Resource +jdk/internal/loader/URLClassPath jdk/internal/loader/URLClassPath$1 -java/util/concurrent/CopyOnWriteArrayList$COWIterator -java/util/ServiceLoader$1 -java/util/ServiceLoader$ProviderImpl -java/util/ServiceLoader$Provider +jdk/internal/loader/URLClassPath$3 +jdk/internal/loader/URLClassPath$JarLoader +jdk/internal/loader/URLClassPath$JarLoader$1 +jdk/internal/loader/URLClassPath$JarLoader$2 +jdk/internal/loader/URLClassPath$Loader +jdk/internal/logger/BootstrapLogger +jdk/internal/logger/BootstrapLogger$BootstrapExecutors +jdk/internal/logger/BootstrapLogger$DetectBackend +jdk/internal/logger/BootstrapLogger$DetectBackend$1 jdk/internal/logger/BootstrapLogger$LoggingBackend jdk/internal/logger/BootstrapLogger$RedirectedLoggers -jdk/internal/logger/BootstrapLogger$BootstrapExecutors -java/util/logging/LogManager$4 -java/util/logging/Logger$SystemLoggerHelper -java/util/logging/Logger$SystemLoggerHelper$1 +jdk/internal/logger/DefaultLoggerFinder jdk/internal/logger/DefaultLoggerFinder$1 -java/net/InetAddress -java/net/InetAddress$1 -java/net/InetAddress$2 -jdk/internal/misc/JavaNetInetAddressAccess -java/net/InetAddress$InetAddressHolder -java/util/concurrent/ConcurrentSkipListSet -java/util/NavigableSet -java/util/SortedSet -java/util/concurrent/ConcurrentSkipListMap -java/util/concurrent/ConcurrentNavigableMap -java/util/NavigableMap -java/util/SortedMap -java/util/concurrent/ConcurrentSkipListMap$Index -java/util/concurrent/atomic/LongAdder -java/util/concurrent/atomic/Striped64 -java/util/concurrent/ConcurrentSkipListMap$Node -java/net/InetAddressImplFactory -java/net/Inet6AddressImpl -java/net/InetAddressImpl -java/net/InetAddress$PlatformNameService -java/net/InetAddress$NameService -java/net/Inet4AddressImpl -java/net/Inet4Address -java/util/Spliterators$ArraySpliterator -java/util/stream/Collectors -java/util/stream/Collector$Characteristics -java/util/EnumSet -java/util/RegularEnumSet -java/util/stream/Collectors$CollectorImpl -java/util/stream/Collector -java/util/StringJoiner -java/util/function/BiConsumer -java/util/function/BinaryOperator -java/util/stream/ReduceOps -java/util/stream/ReduceOps$3 -java/util/stream/ReduceOps$ReduceOp -java/util/stream/ReduceOps$ReduceTask -java/util/stream/AbstractTask -java/util/concurrent/CountedCompleter -java/util/concurrent/ForkJoinTask -java/util/concurrent/Future -java/util/concurrent/ForkJoinTask$ExceptionNode -java/util/concurrent/ForkJoinPool -java/util/concurrent/AbstractExecutorService -java/util/concurrent/ExecutorService -java/util/concurrent/Executor -java/lang/invoke/VarHandleLongs$FieldInstanceReadWrite -java/lang/invoke/VarHandleLongs$FieldInstanceReadOnly -java/lang/invoke/VarHandleObjects$Array -java/util/concurrent/ForkJoinPool$DefaultForkJoinWorkerThreadFactory -java/util/concurrent/ForkJoinPool$ForkJoinWorkerThreadFactory -java/util/concurrent/ForkJoinPool$1 -java/util/concurrent/ForkJoinPool$WorkQueue -java/util/concurrent/ForkJoinWorkerThread -java/util/concurrent/ThreadLocalRandom -java/util/Random -java/util/concurrent/ForkJoinPool$DefaultForkJoinWorkerThreadFactory$1 -java/util/stream/ReduceOps$3ReducingSink -java/util/stream/ReduceOps$AccumulatingSink -java/util/stream/ReduceOps$Box -java/util/ArrayList$SubList -java/time/format/DateTimeFormatter -java/time/format/DateTimeFormatterBuilder -java/time/ZoneId -java/time/temporal/TemporalQuery -java/lang/Character$CharacterCache -java/time/temporal/ChronoField -java/time/temporal/TemporalField -java/time/temporal/ChronoUnit -java/time/temporal/TemporalUnit -java/time/Duration -java/time/temporal/TemporalAmount -java/math/BigInteger -java/time/temporal/ValueRange -java/time/temporal/IsoFields -java/time/temporal/IsoFields$Field -java/time/temporal/IsoFields$Field$1 -java/time/temporal/IsoFields$Field$2 -java/time/temporal/IsoFields$Field$3 -java/time/temporal/IsoFields$Field$4 -java/time/temporal/IsoFields$Unit -java/time/temporal/JulianFields -java/time/temporal/JulianFields$Field -java/time/format/DateTimeFormatterBuilder$2 -java/time/format/SignStyle -java/time/format/DateTimeFormatterBuilder$NumberPrinterParser -java/time/format/DateTimeFormatterBuilder$DateTimePrinterParser -java/time/format/DateTimeFormatterBuilder$CharLiteralPrinterParser -java/time/format/ResolverStyle -java/time/chrono/IsoChronology -java/time/chrono/AbstractChronology -java/time/chrono/Chronology -java/util/Locale$Category -java/util/Locale$1 -java/time/format/DateTimeFormatterBuilder$CompositePrinterParser -java/time/format/DecimalStyle -java/time/format/DateTimeFormatterBuilder$SettingsParser -java/time/format/DateTimeFormatterBuilder$OffsetIdPrinterParser -java/time/format/DateTimeFormatterBuilder$FractionPrinterParser -java/time/format/DateTimeFormatterBuilder$ZoneIdPrinterParser -java/time/format/DateTimeFormatterBuilder$StringLiteralPrinterParser -java/time/format/DateTimeFormatterBuilder$InstantPrinterParser -java/lang/Long$LongCache -java/time/format/TextStyle -java/util/Collections$SingletonMap -java/time/format/DateTimeTextProvider$LocaleStore -java/util/AbstractMap$SimpleImmutableEntry -java/util/Collections$SingletonSet -java/util/Collections$1 -java/util/LinkedHashMap$LinkedEntrySet -java/util/LinkedHashMap$LinkedEntryIterator -java/util/LinkedHashMap$LinkedHashIterator -java/time/format/DateTimeTextProvider -java/time/format/DateTimeTextProvider$1 -java/util/Arrays$LegacyMergeSort -java/util/TimSort -java/time/format/DateTimeFormatterBuilder$1 -java/time/format/DateTimeFormatterBuilder$TextPrinterParser -java/time/Period -java/time/chrono/ChronoPeriod -java/time/ZoneOffset -java/time/temporal/TemporalAdjuster -java/time/ZoneRegion -java/time/zone/ZoneRules -java/time/zone/ZoneOffsetTransitionRule -java/time/LocalDateTime -java/time/temporal/Temporal -java/time/chrono/ChronoLocalDateTime -java/time/LocalDate -java/time/chrono/ChronoLocalDate -java/time/LocalTime -java/time/Clock -java/time/Clock$SystemClock -java/time/Instant -java/time/format/DateTimePrintContext -java/time/temporal/TemporalQueries -java/time/temporal/TemporalQueries$1 -java/time/temporal/TemporalQueries$2 -java/time/temporal/TemporalQueries$3 -java/time/temporal/TemporalQueries$4 -java/time/temporal/TemporalQueries$5 -java/time/temporal/TemporalQueries$6 -java/time/temporal/TemporalQueries$7 -java/time/LocalDate$1 -java/time/format/DateTimeFormatterBuilder$3 -java/time/LocalTime$1 -java/math/BigDecimal -java/math/BigDecimal$1 -java/math/RoundingMode -java/text/DateFormat -java/text/Format -java/text/spi/DateFormatProvider -java/util/spi/LocaleServiceProvider -sun/util/locale/provider/LocaleProviderAdapter -sun/util/locale/provider/LocaleProviderAdapter$Type -sun/util/locale/provider/LocaleProviderAdapter$NonExistentAdapter -sun/util/locale/provider/FallbackLocaleProviderAdapter -sun/util/locale/provider/JRELocaleProviderAdapter -sun/util/locale/provider/ResourceBundleBasedAdapter -sun/util/locale/LanguageTag -sun/util/locale/provider/LocaleResources -sun/util/resources/LocaleData -java/util/ResourceBundle$Control -java/util/ResourceBundle$Control$CandidateListCache -java/util/ResourceBundle -sun/util/locale/provider/LocaleProviderAdapter$1 -sun/util/cldr/CLDRLocaleProviderAdapter +jdk/internal/math/FloatingDecimal +jdk/internal/math/FloatingDecimal$1 +jdk/internal/math/FloatingDecimal$ASCIIToBinaryConverter +jdk/internal/math/FloatingDecimal$BinaryToASCIIBuffer +jdk/internal/math/FloatingDecimal$BinaryToASCIIConverter +jdk/internal/math/FloatingDecimal$ExceptionalBinaryToASCIIBuffer +jdk/internal/math/FloatingDecimal$PreparedASCIIToBinaryBuffer +jdk/internal/misc/CDS +jdk/internal/misc/InnocuousThread +jdk/internal/misc/OSEnvironment +jdk/internal/misc/ScopedMemoryAccess +jdk/internal/misc/Signal +jdk/internal/misc/Signal$Handler +jdk/internal/misc/Signal$NativeHandler +jdk/internal/misc/TerminatingThreadLocal +jdk/internal/misc/TerminatingThreadLocal$1 +jdk/internal/misc/Unsafe +jdk/internal/misc/UnsafeConstants +jdk/internal/misc/VM +jdk/internal/misc/VM$BufferPool +jdk/internal/module/ArchivedBootLayer +jdk/internal/module/ArchivedModuleGraph +jdk/internal/module/Builder +jdk/internal/module/Checks +jdk/internal/module/DefaultRoots +jdk/internal/module/ModuleBootstrap +jdk/internal/module/ModuleBootstrap$Counters +jdk/internal/module/ModuleBootstrap$SafeModuleFinder +jdk/internal/module/ModuleHashes +jdk/internal/module/ModuleHashes$HashSupplier +jdk/internal/module/ModuleInfo$Attributes +jdk/internal/module/ModuleLoaderMap +jdk/internal/module/ModuleLoaderMap$Mapper +jdk/internal/module/ModuleLoaderMap$Modules +jdk/internal/module/ModulePatcher +jdk/internal/module/ModulePath +jdk/internal/module/ModulePath$Patterns +jdk/internal/module/ModuleReferenceImpl +jdk/internal/module/ModuleReferences +jdk/internal/module/ModuleResolution +jdk/internal/module/ModuleTarget +jdk/internal/module/Modules +jdk/internal/module/Resources +jdk/internal/module/ServicesCatalog +jdk/internal/module/ServicesCatalog$ServiceProvider +jdk/internal/module/SystemModuleFinders +jdk/internal/module/SystemModuleFinders$2 +jdk/internal/module/SystemModuleFinders$SystemImage +jdk/internal/module/SystemModuleFinders$SystemModuleFinder +jdk/internal/module/SystemModuleFinders$SystemModuleReader +jdk/internal/module/SystemModules +jdk/internal/module/SystemModules$all +jdk/internal/module/SystemModulesMap +jdk/internal/org/objectweb/asm/AnnotationVisitor +jdk/internal/org/objectweb/asm/AnnotationWriter +jdk/internal/org/objectweb/asm/Attribute +jdk/internal/org/objectweb/asm/ByteVector +jdk/internal/org/objectweb/asm/ClassReader +jdk/internal/org/objectweb/asm/ClassVisitor +jdk/internal/org/objectweb/asm/ClassWriter +jdk/internal/org/objectweb/asm/ConstantDynamic +jdk/internal/org/objectweb/asm/FieldVisitor +jdk/internal/org/objectweb/asm/FieldWriter +jdk/internal/org/objectweb/asm/Frame +jdk/internal/org/objectweb/asm/Handle +jdk/internal/org/objectweb/asm/Handler +jdk/internal/org/objectweb/asm/Label +jdk/internal/org/objectweb/asm/MethodVisitor +jdk/internal/org/objectweb/asm/MethodWriter +jdk/internal/org/objectweb/asm/Symbol +jdk/internal/org/objectweb/asm/SymbolTable +jdk/internal/org/objectweb/asm/SymbolTable$Entry +jdk/internal/org/objectweb/asm/Type +jdk/internal/perf/Perf +jdk/internal/perf/Perf$GetPerfAction +jdk/internal/perf/PerfCounter +jdk/internal/perf/PerfCounter$CoreCounters +jdk/internal/ref/Cleaner +jdk/internal/ref/CleanerFactory +jdk/internal/ref/CleanerFactory$1 +jdk/internal/ref/CleanerImpl +jdk/internal/ref/CleanerImpl$CleanerCleanable +jdk/internal/ref/CleanerImpl$PhantomCleanableRef +jdk/internal/ref/PhantomCleanable +jdk/internal/reflect/CallerSensitive +jdk/internal/reflect/ConstantPool +jdk/internal/reflect/ConstructorAccessor +jdk/internal/reflect/ConstructorAccessorImpl +jdk/internal/reflect/DelegatingClassLoader +jdk/internal/reflect/DirectConstructorHandleAccessor +jdk/internal/reflect/DirectConstructorHandleAccessor$NativeAccessor +jdk/internal/reflect/DirectMethodHandleAccessor +jdk/internal/reflect/FieldAccessor +jdk/internal/reflect/FieldAccessorImpl +jdk/internal/reflect/MagicAccessorImpl +jdk/internal/reflect/MethodAccessor +jdk/internal/reflect/MethodAccessorImpl +jdk/internal/reflect/MethodHandleAccessorFactory +jdk/internal/reflect/MethodHandleAccessorFactory$LazyStaticHolder +jdk/internal/reflect/MethodHandleFieldAccessorImpl +jdk/internal/reflect/MethodHandleObjectFieldAccessorImpl +jdk/internal/reflect/NativeConstructorAccessorImpl +jdk/internal/reflect/Reflection +jdk/internal/reflect/ReflectionFactory +jdk/internal/reflect/ReflectionFactory$GetReflectionFactoryAction +jdk/internal/reflect/UnsafeFieldAccessorImpl +jdk/internal/reflect/UnsafeStaticFieldAccessorImpl +jdk/internal/util/ArraysSupport +jdk/internal/util/Preconditions +jdk/internal/util/Preconditions$1 +jdk/internal/util/Preconditions$2 +jdk/internal/util/Preconditions$3 +jdk/internal/util/Preconditions$4 +jdk/internal/util/StaticProperty +jdk/internal/util/SystemProps +jdk/internal/util/SystemProps$Raw +jdk/internal/util/random/RandomSupport +jdk/internal/vm/vector/VectorSupport +jdk/internal/vm/vector/VectorSupport$Vector +jdk/internal/vm/vector/VectorSupport$VectorMask +jdk/internal/vm/vector/VectorSupport$VectorPayload +jdk/internal/vm/vector/VectorSupport$VectorShuffle +sun/invoke/empty/Empty +sun/invoke/util/BytecodeDescriptor +sun/invoke/util/ValueConversions +sun/invoke/util/ValueConversions$WrapperCache +sun/invoke/util/VerifyAccess +sun/invoke/util/VerifyType +sun/invoke/util/Wrapper +sun/invoke/util/Wrapper$1 +sun/invoke/util/Wrapper$Format +sun/io/Win32ErrorMode +sun/launcher/LauncherHelper +sun/net/util/IPAddressUtil +sun/net/util/URLUtil +sun/net/www/ParseUtil +sun/net/www/protocol/file/Handler +sun/net/www/protocol/jar/Handler +sun/nio/ByteBuffered +sun/nio/ch/DirectBuffer +sun/nio/cs/ArrayDecoder +sun/nio/cs/ArrayEncoder +sun/nio/cs/HistoricallyNamedCharset +sun/nio/cs/ISO_8859_1 +sun/nio/cs/MS1252 +sun/nio/cs/MS1252$Holder +sun/nio/cs/SingleByte +sun/nio/cs/SingleByte$Decoder +sun/nio/cs/SingleByte$Encoder +sun/nio/cs/StandardCharsets +sun/nio/cs/StandardCharsets$Aliases +sun/nio/cs/StandardCharsets$Cache +sun/nio/cs/StandardCharsets$Classes +sun/nio/cs/StreamEncoder +sun/nio/cs/US_ASCII +sun/nio/cs/UTF_16 +sun/nio/cs/UTF_16BE +sun/nio/cs/UTF_16LE +sun/nio/cs/UTF_8 +sun/nio/cs/Unicode +sun/nio/fs/AbstractBasicFileAttributeView +sun/nio/fs/AbstractFileSystemProvider +sun/nio/fs/DefaultFileSystemProvider +sun/nio/fs/DynamicFileAttributeView +sun/nio/fs/NativeBuffer +sun/nio/fs/NativeBuffer$Deallocator +sun/nio/fs/NativeBuffers +sun/nio/fs/NativeBuffers$1 +sun/nio/fs/Util +sun/nio/fs/WindowsFileAttributeViews +sun/nio/fs/WindowsFileAttributeViews$Basic +sun/nio/fs/WindowsFileAttributes +sun/nio/fs/WindowsFileSystem +sun/nio/fs/WindowsFileSystemProvider +sun/nio/fs/WindowsNativeDispatcher +sun/nio/fs/WindowsNativeDispatcher$Account +sun/nio/fs/WindowsNativeDispatcher$AclInformation +sun/nio/fs/WindowsNativeDispatcher$CompletionStatus +sun/nio/fs/WindowsNativeDispatcher$DiskFreeSpace +sun/nio/fs/WindowsNativeDispatcher$FirstFile +sun/nio/fs/WindowsNativeDispatcher$FirstStream +sun/nio/fs/WindowsNativeDispatcher$VolumeInformation +sun/nio/fs/WindowsPath +sun/nio/fs/WindowsPathParser +sun/nio/fs/WindowsPathParser$Result +sun/nio/fs/WindowsPathType +sun/nio/fs/WindowsUriSupport +sun/reflect/annotation/AnnotationParser +sun/security/action/GetBooleanAction +sun/security/action/GetPropertyAction +sun/security/util/Debug +sun/security/util/FilePermCompat +sun/security/util/LazyCodeSourcePermissionCollection +sun/security/util/SecurityProperties +sun/text/resources/cldr/FormatData +sun/util/PreHashedMap +sun/util/calendar/AbstractCalendar +sun/util/calendar/BaseCalendar +sun/util/calendar/BaseCalendar$Date +sun/util/calendar/CalendarDate +sun/util/calendar/CalendarSystem +sun/util/calendar/CalendarSystem$GregorianHolder +sun/util/calendar/CalendarUtils +sun/util/calendar/Gregorian +sun/util/calendar/Gregorian$Date +sun/util/calendar/ZoneInfo +sun/util/calendar/ZoneInfoFile +sun/util/calendar/ZoneInfoFile$1 +sun/util/calendar/ZoneInfoFile$ZoneOffsetTransitionRule sun/util/cldr/CLDRBaseLocaleDataMetaInfo -sun/util/locale/provider/LocaleDataMetaInfo +sun/util/cldr/CLDRCalendarDataProviderImpl +sun/util/cldr/CLDRLocaleProviderAdapter +sun/util/locale/BaseLocale +sun/util/locale/BaseLocale$Cache +sun/util/locale/BaseLocale$Key +sun/util/locale/InternalLocaleBuilder +sun/util/locale/InternalLocaleBuilder$CaseInsensitiveChar +sun/util/locale/LanguageTag +sun/util/locale/LocaleObjectCache +sun/util/locale/LocaleObjectCache$CacheEntry +sun/util/locale/LocaleUtils sun/util/locale/ParseStatus sun/util/locale/StringTokenIterator -sun/util/cldr/CLDRLocaleProviderAdapter$1 -java/lang/invoke/DirectMethodHandle$Special -sun/util/locale/provider/DateFormatProviderImpl sun/util/locale/provider/AvailableLanguageTags -java/util/StringTokenizer +sun/util/locale/provider/CalendarDataProviderImpl sun/util/locale/provider/CalendarDataUtility -java/text/SimpleDateFormat -java/text/DateFormat$Field -java/text/Format$Field -java/text/AttributedCharacterIterator$Attribute -java/util/Calendar -java/util/TimeZone -sun/util/calendar/ZoneInfo -sun/util/calendar/ZoneInfoFile -sun/util/calendar/ZoneInfoFile$1 -java/io/DataInputStream -sun/util/calendar/ZoneInfoFile$ZoneOffsetTransitionRule -sun/util/calendar/ZoneInfoFile$Checksum -java/util/zip/CRC32 -java/util/zip/Checksum -java/util/zip/Checksum$1 -sun/util/spi/CalendarProvider +sun/util/locale/provider/CalendarDataUtility$CalendarWeekParameterGetter sun/util/locale/provider/CalendarProviderImpl -java/util/Calendar$Builder -java/util/GregorianCalendar -sun/util/calendar/CalendarSystem -sun/util/calendar/Gregorian -sun/util/calendar/BaseCalendar -sun/util/calendar/AbstractCalendar -java/util/spi/CalendarDataProvider +sun/util/locale/provider/DateFormatProviderImpl +sun/util/locale/provider/DateFormatSymbolsProviderImpl +sun/util/locale/provider/DecimalFormatSymbolsProviderImpl +sun/util/locale/provider/JRELocaleProviderAdapter +sun/util/locale/provider/LocaleDataMetaInfo +sun/util/locale/provider/LocaleProviderAdapter +sun/util/locale/provider/LocaleProviderAdapter$1 +sun/util/locale/provider/LocaleProviderAdapter$Type +sun/util/locale/provider/LocaleResources +sun/util/locale/provider/LocaleResources$ResourceReference sun/util/locale/provider/LocaleServiceProviderPool -java/text/spi/BreakIteratorProvider -java/text/spi/CollatorProvider -java/text/spi/DateFormatSymbolsProvider -java/text/spi/DecimalFormatSymbolsProvider -java/text/spi/NumberFormatProvider -java/util/spi/CurrencyNameProvider -java/util/spi/LocaleNameProvider -java/util/spi/TimeZoneNameProvider -sun/util/locale/provider/CalendarDataUtility$CalendarWeekParameterGetter sun/util/locale/provider/LocaleServiceProviderPool$LocalizedObjectGetter -java/util/ResourceBundle$NoFallbackControl -java/util/ResourceBundle$SingleFormatControl -java/util/LinkedList -java/util/AbstractSequentialList -java/util/LinkedList$Node -sun/util/cldr/CLDRCalendarDataProviderImpl -sun/util/locale/provider/CalendarDataProviderImpl -sun/util/resources/LocaleData$1 -sun/util/resources/LocaleData$LocaleDataStrategy -sun/util/resources/Bundles$Strategy +sun/util/locale/provider/NumberFormatProviderImpl +sun/util/locale/provider/ResourceBundleBasedAdapter +sun/util/logging/PlatformLogger$Bridge +sun/util/logging/PlatformLogger$ConfigurableBridge +sun/util/logging/internal/LoggingProviderImpl +sun/util/logging/internal/LoggingProviderImpl$LogManagerAccess sun/util/resources/Bundles sun/util/resources/Bundles$1 -java/util/ResourceBundle$1 -jdk/internal/misc/JavaUtilResourceBundleAccess -java/util/ResourceBundle$2 -sun/util/resources/Bundles$CacheKey -sun/util/resources/cldr/CalendarData -java/util/ListResourceBundle -java/util/ResourceBundle$ResourceBundleProviderHelper sun/util/resources/Bundles$BundleReference +sun/util/resources/Bundles$CacheKey sun/util/resources/Bundles$CacheKeyReference -sun/util/locale/provider/LocaleResources$ResourceReference -sun/util/calendar/Gregorian$Date -sun/util/calendar/BaseCalendar$Date -sun/util/calendar/CalendarDate -sun/util/calendar/CalendarUtils -java/text/DateFormatSymbols -sun/util/locale/provider/DateFormatSymbolsProviderImpl -sun/text/resources/cldr/FormatData -java/text/NumberFormat -sun/util/locale/provider/NumberFormatProviderImpl -java/text/DecimalFormatSymbols -sun/util/locale/provider/DecimalFormatSymbolsProviderImpl -java/text/DecimalFormat -java/text/FieldPosition -java/text/DigitList -java/util/Date -java/text/DontCareFieldPosition -java/text/DontCareFieldPosition$1 -java/text/Format$FieldDelegate -java/text/NumberFormat$Field -java/util/Formatter -java/util/regex/Pattern -java/util/regex/Pattern$1 -java/util/regex/Pattern$Node -java/util/regex/Pattern$LastNode -java/util/regex/Pattern$GroupHead -java/util/regex/Pattern$BmpCharPredicate -java/util/regex/Pattern$CharPredicate -java/util/regex/Pattern$BmpCharProperty -java/util/regex/Pattern$CharProperty -java/util/regex/Pattern$GroupTail -java/util/regex/CharPredicates -java/util/regex/Pattern$BmpCharPropertyGreedy -java/util/regex/Pattern$CharPropertyGreedy -java/util/regex/Pattern$Ques -java/util/regex/Pattern$Qtype -java/util/regex/Pattern$BranchConn -java/util/regex/Pattern$Branch -java/util/regex/Pattern$BitClass -java/util/regex/Pattern$Slice -java/util/regex/Pattern$SliceNode -java/util/regex/Pattern$Begin -java/util/regex/Pattern$First -java/util/regex/Pattern$Start -java/util/regex/Pattern$TreeInfo -java/util/regex/Matcher -java/util/regex/MatchResult -java/util/regex/IntHashSet -java/util/regex/ASCII -java/util/Formatter$FormatSpecifier -java/util/Formatter$FormatString -java/util/Formatter$Flags -java/util/Formatter$Conversion -java/util/Formattable -java/util/logging/LogRecord -java/util/logging/ConsoleHandler -java/util/logging/StreamHandler -java/util/logging/SimpleFormatter -java/util/logging/Formatter -jdk/internal/logger/SurrogateLogger -jdk/internal/logger/SimpleConsoleLogger -sun/util/logging/PlatformLogger$ConfigurableBridge$LoggerConfiguration -java/lang/System$Logger$Level -sun/util/logging/PlatformLogger -sun/util/logging/PlatformLogger$Level -jdk/internal/logger/SimpleConsoleLogger$Formatting -java/util/logging/ErrorManager -java/util/logging/Handler$1 -java/util/logging/StreamHandler$1 -java/util/logging/LogManager$CloseOnReset -java/time/zone/ZoneRulesProvider -java/time/zone/ZoneRulesProvider$1 -java/time/zone/TzdbZoneRulesProvider -java/time/zone/Ser -java/io/Externalizable -java/time/Month -java/time/DayOfWeek -java/time/zone/ZoneOffsetTransitionRule$TimeDefinition -java/time/zone/ZoneOffsetTransition -java/time/ZonedDateTime -java/time/chrono/ChronoZonedDateTime -java/time/temporal/TemporalAdjusters -java/time/zone/ZoneOffsetTransitionRule$1 -java/util/logging/LogRecord$CallerFinder -java/lang/StackWalker$Option -java/lang/StackStreamFactory -java/lang/StackWalker$ExtendedOption -java/lang/StackStreamFactory$StackFrameTraverser -java/lang/StackStreamFactory$WalkerState -java/lang/StackStreamFactory$1 -java/lang/StackStreamFactory$StackFrameTraverser$StackFrameBuffer -java/lang/StackStreamFactory$FrameBuffer -java/util/stream/ReferencePipeline$2 -java/util/stream/ReferencePipeline$2$1 -java/util/logging/Level$RbAccess -java/util/ResourceBundle$CacheKey -java/util/ResourceBundle$KeyElementReference -java/util/ResourceBundle$CacheKeyReference -java/util/ResourceBundle$3 -sun/util/logging/resources/logging -java/util/ResourceBundle$BundleReference -jdk/internal/module/Checks -java/util/Formatter$DateTime -java/util/Formatter$FixedString -java/time/ZonedDateTime$1 -sun/text/resources/cldr/FormatData_en -java/util/IdentityHashMap$KeyIterator -java/util/IdentityHashMap$IdentityHashMapIterator +sun/util/resources/Bundles$Strategy +sun/util/resources/LocaleData +sun/util/resources/LocaleData$1 +sun/util/resources/LocaleData$LocaleDataStrategy +sun/util/resources/cldr/CalendarData +sun/util/spi/CalendarProvider +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DelegatingMethodHandle$Holder delegate L6_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DelegatingMethodHandle$Holder reinvoke_L L3_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DelegatingMethodHandle$Holder reinvoke_L L3_V +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DelegatingMethodHandle$Holder reinvoke_L LJI_J +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DelegatingMethodHandle$Holder reinvoke_L LJJ_J +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DelegatingMethodHandle$Holder reinvoke_L LJL3_J +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DelegatingMethodHandle$Holder reinvoke_L LJLIL_J +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DelegatingMethodHandle$Holder reinvoke_L LJLJL_J +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DelegatingMethodHandle$Holder reinvoke_L LJL_J +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DelegatingMethodHandle$Holder reinvoke_L LLJ_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DelegatingMethodHandle$Holder reinvoke_L LL_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DelegatingMethodHandle$Holder reinvoke_L L_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DelegatingMethodHandle$Holder reinvoke_L L_V +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder getDouble LL_D +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder getInt LL_I +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder getLong LL_J +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder getReference LL_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeInterface L3_I +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial L3I_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial L3J_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial L3_J +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial L3_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial L4_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial L4_V +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial L5_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial L6_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial L7_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial L8_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial LLD_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial LLII_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial LLIL_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial LLI_J +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial LLI_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial LLJI_J +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial LLJJ_J +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial LLJJ_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial LLJL3_J +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial LLJLIL_J +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial LLJLI_J +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial LLJLJL_J +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial LLJLJ_J +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial LLJLL_J +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial LLJL_J +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial LLJ_J +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial LLJ_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial LL_I +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial LL_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeSpecial LL_V +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L10_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L11_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L12_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L13_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L14_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L15_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L16_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L3DL_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L3D_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L3IL_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L3I_I +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L3I_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L3_I +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L3_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L4J_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L4_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L5_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L5_V +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L6_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L7_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L8_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L9_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic LD_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic LI3_I +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic LII_I +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic LI_I +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic LI_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic LJI_J +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic LJJ_J +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic LJL3_J +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic LJLIL_J +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic LJLJL_J +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic LJL_J +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic LJ_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic LLI_I +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic LLJ_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic LL_I +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic LL_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStatic L_V +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeStaticInit LL_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeVirtual L3_V +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder invokeVirtual LL_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder newInvokeSpecial L3_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder newInvokeSpecial L4_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder newInvokeSpecial LII_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder newInvokeSpecial LI_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder newInvokeSpecial LL_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.DirectMethodHandle$Holder newInvokeSpecial L_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.Invokers$Holder invokeExact_MT L3_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.Invokers$Holder invokeExact_MT L4_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.Invokers$Holder invokeExact_MT L7_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.Invokers$Holder invokeExact_MT L8_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.Invokers$Holder invokeExact_MT LL_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.Invokers$Holder invoke_MT LL_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.Invokers$Holder linkToTargetMethod DL_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.Invokers$Holder linkToTargetMethod IIL_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.Invokers$Holder linkToTargetMethod ILL_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.Invokers$Holder linkToTargetMethod IL_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.Invokers$Holder linkToTargetMethod JJL_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.Invokers$Holder linkToTargetMethod JL_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.Invokers$Holder linkToTargetMethod L3_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.Invokers$Holder linkToTargetMethod L4_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.Invokers$Holder linkToTargetMethod L5_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.Invokers$Holder linkToTargetMethod L6_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.Invokers$Holder linkToTargetMethod LIL_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.Invokers$Holder linkToTargetMethod LL_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.Invokers$Holder linkToTargetMethod L_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.LambdaForm$Holder identity_D LD_D +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.LambdaForm$Holder identity_I LI_I +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.LambdaForm$Holder identity_L LL_L +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.LambdaForm$Holder zero_D L_D +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.LambdaForm$Holder zero_I L_I +@lambda-form-invoker [LF_RESOLVE] java.lang.invoke.LambdaForm$Holder zero_L L_L +@lambda-form-invoker [SPECIES_RESOLVE] java.lang.invoke.BoundMethodHandle$Species_D +@lambda-form-invoker [SPECIES_RESOLVE] java.lang.invoke.BoundMethodHandle$Species_DL +@lambda-form-invoker [SPECIES_RESOLVE] java.lang.invoke.BoundMethodHandle$Species_I +@lambda-form-invoker [SPECIES_RESOLVE] java.lang.invoke.BoundMethodHandle$Species_IL +@lambda-form-invoker [SPECIES_RESOLVE] java.lang.invoke.BoundMethodHandle$Species_L +@lambda-form-invoker [SPECIES_RESOLVE] java.lang.invoke.BoundMethodHandle$Species_LJ +@lambda-form-invoker [SPECIES_RESOLVE] java.lang.invoke.BoundMethodHandle$Species_LL +@lambda-form-invoker [SPECIES_RESOLVE] java.lang.invoke.BoundMethodHandle$Species_LLL +@lambda-form-invoker [SPECIES_RESOLVE] java.lang.invoke.BoundMethodHandle$Species_LLLL +@lambda-form-invoker [SPECIES_RESOLVE] java.lang.invoke.BoundMethodHandle$Species_LLLLL +@lambda-form-invoker [SPECIES_RESOLVE] java.lang.invoke.BoundMethodHandle$Species_LLLLLL +@lambda-form-invoker [SPECIES_RESOLVE] java.lang.invoke.BoundMethodHandle$Species_LLLLLLL +@lambda-form-invoker [SPECIES_RESOLVE] java.lang.invoke.BoundMethodHandle$Species_LLLLLLLL +@lambda-form-invoker [SPECIES_RESOLVE] java.lang.invoke.BoundMethodHandle$Species_LLLLLLLLL +@lambda-form-invoker [SPECIES_RESOLVE] java.lang.invoke.BoundMethodHandle$Species_LLLLLLLLLL +@lambda-form-invoker [SPECIES_RESOLVE] java.lang.invoke.BoundMethodHandle$Species_LLLLLLLLLLL +@lambda-form-invoker [SPECIES_RESOLVE] java.lang.invoke.BoundMethodHandle$Species_LLLLLLLLLLLL +@lambda-form-invoker [SPECIES_RESOLVE] java.lang.invoke.BoundMethodHandle$Species_LLLLLLLLLLLLL +@lambda-form-invoker [SPECIES_RESOLVE] java.lang.invoke.SimpleMethodHandle +@lambda-proxy java/lang/module/ModuleDescriptor$Builder accept ()Ljava/util/function/Consumer; (Ljava/lang/Object;)V REF_invokeStatic jdk/internal/module/Checks requirePackageName (Ljava/lang/String;)Ljava/lang/String; (Ljava/lang/String;)V +@lambda-proxy java/lang/module/ModuleFinder$2 accept (Ljava/lang/module/ModuleFinder$2;Ljava/lang/String;)Ljava/util/function/Consumer; (Ljava/lang/Object;)V REF_invokeVirtual java/lang/module/ModuleFinder$2 lambda$find$1 (Ljava/lang/String;Ljava/lang/module/ModuleReference;)V (Ljava/lang/module/ModuleReference;)V +@lambda-proxy java/lang/module/ModuleFinder$2 accept (Ljava/lang/module/ModuleFinder$2;Ljava/util/Set;)Ljava/util/function/Consumer; (Ljava/lang/Object;)V REF_invokeVirtual java/lang/module/ModuleFinder$2 lambda$findAll$3 (Ljava/util/Set;Ljava/lang/module/ModuleReference;)V (Ljava/lang/module/ModuleReference;)V +@lambda-proxy java/lang/module/ModuleFinder$2 apply ()Ljava/util/function/Function; (Ljava/lang/Object;)Ljava/lang/Object; REF_invokeStatic java/lang/module/ModuleFinder$2 lambda$findAll$2 (Ljava/lang/module/ModuleFinder;)Ljava/util/stream/Stream; (Ljava/lang/module/ModuleFinder;)Ljava/util/stream/Stream; +@lambda-proxy java/lang/module/ModuleFinder$2 apply ()Ljava/util/function/Function; (Ljava/lang/Object;)Ljava/lang/Object; REF_invokeVirtual java/util/Optional stream ()Ljava/util/stream/Stream; (Ljava/util/Optional;)Ljava/util/stream/Stream; +@lambda-proxy java/lang/module/ModuleFinder$2 apply (Ljava/lang/String;)Ljava/util/function/Function; (Ljava/lang/Object;)Ljava/lang/Object; REF_invokeStatic java/lang/module/ModuleFinder$2 lambda$find$0 (Ljava/lang/String;Ljava/lang/module/ModuleFinder;)Ljava/util/Optional; (Ljava/lang/module/ModuleFinder;)Ljava/util/Optional; +@lambda-proxy java/text/DecimalFormatSymbols test ()Ljava/util/function/IntPredicate; (I)Z REF_invokeStatic java/text/DecimalFormatSymbols lambda$findNonFormatChar$0 (I)Z (I)Z +@lambda-proxy java/time/format/DateTimeFormatter queryFrom ()Ljava/time/temporal/TemporalQuery; (Ljava/time/temporal/TemporalAccessor;)Ljava/lang/Object; REF_invokeStatic java/time/format/DateTimeFormatter lambda$static$0 (Ljava/time/temporal/TemporalAccessor;)Ljava/time/Period; (Ljava/time/temporal/TemporalAccessor;)Ljava/time/Period; +@lambda-proxy java/time/format/DateTimeFormatter queryFrom ()Ljava/time/temporal/TemporalQuery; (Ljava/time/temporal/TemporalAccessor;)Ljava/lang/Object; REF_invokeStatic java/time/format/DateTimeFormatter lambda$static$1 (Ljava/time/temporal/TemporalAccessor;)Ljava/lang/Boolean; (Ljava/time/temporal/TemporalAccessor;)Ljava/lang/Boolean; +@lambda-proxy java/time/format/DateTimeFormatterBuilder queryFrom ()Ljava/time/temporal/TemporalQuery; (Ljava/time/temporal/TemporalAccessor;)Ljava/lang/Object; REF_invokeStatic java/time/format/DateTimeFormatterBuilder lambda$static$0 (Ljava/time/temporal/TemporalAccessor;)Ljava/time/ZoneId; (Ljava/time/temporal/TemporalAccessor;)Ljava/time/ZoneId; +@lambda-proxy java/util/ResourceBundle$ResourceBundleProviderHelper run (Ljava/lang/reflect/Constructor;)Ljava/security/PrivilegedAction; ()Ljava/lang/Object; REF_invokeStatic java/util/ResourceBundle$ResourceBundleProviderHelper lambda$newResourceBundle$0 (Ljava/lang/reflect/Constructor;)Ljava/lang/Void; ()Ljava/lang/Void; +@lambda-proxy java/util/logging/Level apply ()Ljava/util/function/Function; (Ljava/lang/Object;)Ljava/lang/Object; REF_invokeVirtual java/util/logging/Level$KnownLevel mirrored ()Ljava/util/Optional; (Ljava/util/logging/Level$KnownLevel;)Ljava/util/Optional; +@lambda-proxy java/util/logging/Level$KnownLevel apply ()Ljava/util/function/Function; (Ljava/lang/Object;)Ljava/lang/Object; REF_invokeStatic java/util/logging/Level$KnownLevel lambda$add$3 (Ljava/lang/String;)Ljava/util/List; (Ljava/lang/String;)Ljava/util/List; +@lambda-proxy java/util/logging/Level$KnownLevel apply ()Ljava/util/function/Function; (Ljava/lang/Object;)Ljava/lang/Object; REF_invokeStatic java/util/logging/Level$KnownLevel lambda$add$4 (Ljava/lang/Integer;)Ljava/util/List; (Ljava/lang/Integer;)Ljava/util/List; +@lambda-proxy java/util/logging/Level$KnownLevel apply ()Ljava/util/function/Function; (Ljava/lang/Object;)Ljava/lang/Object; REF_invokeVirtual java/util/Optional stream ()Ljava/util/stream/Stream; (Ljava/util/Optional;)Ljava/util/stream/Stream; +@lambda-proxy java/util/regex/CharPredicates is ()Ljava/util/regex/Pattern$BmpCharPredicate; (I)Z REF_invokeStatic java/util/regex/CharPredicates lambda$ASCII_DIGIT$18 (I)Z (I)Z +@lambda-proxy java/util/regex/CharPredicates is ()Ljava/util/regex/Pattern$BmpCharPredicate; (I)Z REF_invokeStatic java/util/regex/CharPredicates lambda$ASCII_SPACE$20 (I)Z (I)Z +@lambda-proxy java/util/regex/Pattern is (I)Ljava/util/regex/Pattern$BmpCharPredicate; (I)Z REF_invokeStatic java/util/regex/Pattern lambda$Single$14 (II)Z (I)Z +@lambda-proxy java/util/regex/Pattern is (II)Ljava/util/regex/Pattern$BmpCharPredicate; (I)Z REF_invokeStatic java/util/regex/Pattern lambda$Range$17 (III)Z (I)Z +@lambda-proxy java/util/regex/Pattern is (Ljava/util/regex/Pattern$CharPredicate;)Ljava/util/regex/Pattern$CharPredicate; (I)Z REF_invokeStatic java/util/regex/Pattern lambda$negate$7 (Ljava/util/regex/Pattern$CharPredicate;I)Z (I)Z +@lambda-proxy java/util/regex/Pattern is (Ljava/util/regex/Pattern$CharPredicate;Ljava/util/regex/Pattern$CharPredicate;)Ljava/util/regex/Pattern$BmpCharPredicate; (I)Z REF_invokeStatic java/util/regex/Pattern lambda$union$3 (Ljava/util/regex/Pattern$CharPredicate;Ljava/util/regex/Pattern$CharPredicate;I)Z (I)Z +@lambda-proxy java/util/stream/Collectors accept ()Ljava/util/function/BiConsumer; (Ljava/lang/Object;Ljava/lang/Object;)V REF_invokeInterface java/util/Set add (Ljava/lang/Object;)Z (Ljava/util/HashSet;Ljava/lang/Object;)V +@lambda-proxy java/util/stream/Collectors accept ()Ljava/util/function/BiConsumer; (Ljava/lang/Object;Ljava/lang/Object;)V REF_invokeVirtual java/util/StringJoiner add (Ljava/lang/CharSequence;)Ljava/util/StringJoiner; (Ljava/util/StringJoiner;Ljava/lang/CharSequence;)V +@lambda-proxy java/util/stream/Collectors accept (Ljava/util/function/BiConsumer;Ljava/util/function/Predicate;)Ljava/util/function/BiConsumer; (Ljava/lang/Object;Ljava/lang/Object;)V REF_invokeStatic java/util/stream/Collectors lambda$partitioningBy$62 (Ljava/util/function/BiConsumer;Ljava/util/function/Predicate;Ljava/util/stream/Collectors$Partition;Ljava/lang/Object;)V (Ljava/util/stream/Collectors$Partition;Ljava/lang/Object;)V +@lambda-proxy java/util/stream/Collectors apply ()Ljava/util/function/BinaryOperator; (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; REF_invokeStatic java/util/stream/Collectors lambda$toSet$7 (Ljava/util/HashSet;Ljava/util/HashSet;)Ljava/util/HashSet; (Ljava/util/HashSet;Ljava/util/HashSet;)Ljava/util/HashSet; +@lambda-proxy java/util/stream/Collectors apply ()Ljava/util/function/BinaryOperator; (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; REF_invokeVirtual java/util/StringJoiner merge (Ljava/util/StringJoiner;)Ljava/util/StringJoiner; (Ljava/util/StringJoiner;Ljava/util/StringJoiner;)Ljava/util/StringJoiner; +@lambda-proxy java/util/stream/Collectors apply ()Ljava/util/function/Function; (Ljava/lang/Object;)Ljava/lang/Object; REF_invokeStatic java/util/stream/Collectors lambda$castingIdentity$2 (Ljava/lang/Object;)Ljava/lang/Object; (Ljava/lang/Object;)Ljava/lang/Object; +@lambda-proxy java/util/stream/Collectors apply ()Ljava/util/function/Function; (Ljava/lang/Object;)Ljava/lang/Object; REF_invokeVirtual java/util/StringJoiner toString ()Ljava/lang/String; (Ljava/util/StringJoiner;)Ljava/lang/String; +@lambda-proxy java/util/stream/Collectors apply (Ljava/util/function/BinaryOperator;)Ljava/util/function/BinaryOperator; (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; REF_invokeStatic java/util/stream/Collectors lambda$partitioningBy$63 (Ljava/util/function/BinaryOperator;Ljava/util/stream/Collectors$Partition;Ljava/util/stream/Collectors$Partition;)Ljava/util/stream/Collectors$Partition; (Ljava/util/stream/Collectors$Partition;Ljava/util/stream/Collectors$Partition;)Ljava/util/stream/Collectors$Partition; +@lambda-proxy java/util/stream/Collectors get ()Ljava/util/function/Supplier; ()Ljava/lang/Object; REF_newInvokeSpecial java/util/HashSet ()V ()Ljava/util/HashSet; +@lambda-proxy java/util/stream/Collectors get (Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/util/function/Supplier; ()Ljava/lang/Object; REF_invokeStatic java/util/stream/Collectors lambda$joining$11 (Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;)Ljava/util/StringJoiner; ()Ljava/util/StringJoiner; +@lambda-proxy java/util/stream/Collectors get (Ljava/util/stream/Collector;)Ljava/util/function/Supplier; ()Ljava/lang/Object; REF_invokeStatic java/util/stream/Collectors lambda$partitioningBy$64 (Ljava/util/stream/Collector;)Ljava/util/stream/Collectors$Partition; ()Ljava/util/stream/Collectors$Partition; +@lambda-proxy java/util/stream/FindOps$FindSink$OfInt get ()Ljava/util/function/Supplier; ()Ljava/lang/Object; REF_newInvokeSpecial java/util/stream/FindOps$FindSink$OfInt ()V ()Ljava/util/stream/TerminalSink; +@lambda-proxy java/util/stream/FindOps$FindSink$OfInt get ()Ljava/util/function/Supplier; ()Ljava/lang/Object; REF_newInvokeSpecial java/util/stream/FindOps$FindSink$OfInt ()V ()Ljava/util/stream/TerminalSink; +@lambda-proxy java/util/stream/FindOps$FindSink$OfInt test ()Ljava/util/function/Predicate; (Ljava/lang/Object;)Z REF_invokeVirtual java/util/OptionalInt isPresent ()Z (Ljava/util/OptionalInt;)Z +@lambda-proxy java/util/stream/FindOps$FindSink$OfInt test ()Ljava/util/function/Predicate; (Ljava/lang/Object;)Z REF_invokeVirtual java/util/OptionalInt isPresent ()Z (Ljava/util/OptionalInt;)Z +@lambda-proxy java/util/stream/FindOps$FindSink$OfRef get ()Ljava/util/function/Supplier; ()Ljava/lang/Object; REF_newInvokeSpecial java/util/stream/FindOps$FindSink$OfRef ()V ()Ljava/util/stream/TerminalSink; +@lambda-proxy java/util/stream/FindOps$FindSink$OfRef get ()Ljava/util/function/Supplier; ()Ljava/lang/Object; REF_newInvokeSpecial java/util/stream/FindOps$FindSink$OfRef ()V ()Ljava/util/stream/TerminalSink; +@lambda-proxy java/util/stream/FindOps$FindSink$OfRef test ()Ljava/util/function/Predicate; (Ljava/lang/Object;)Z REF_invokeVirtual java/util/Optional isPresent ()Z (Ljava/util/Optional;)Z +@lambda-proxy java/util/stream/FindOps$FindSink$OfRef test ()Ljava/util/function/Predicate; (Ljava/lang/Object;)Z REF_invokeVirtual java/util/Optional isPresent ()Z (Ljava/util/Optional;)Z +@lambda-proxy java/util/zip/ZipFile apply (Ljava/util/zip/ZipFile;)Ljava/util/function/IntFunction; (I)Ljava/lang/Object; REF_invokeVirtual java/util/zip/ZipFile lambda$jarStream$1 (I)Ljava/util/jar/JarEntry; (I)Ljava/util/jar/JarEntry; +@lambda-proxy jdk/internal/module/DefaultRoots apply ()Ljava/util/function/Function; (Ljava/lang/Object;)Ljava/lang/Object; REF_invokeVirtual java/lang/module/ModuleDescriptor name ()Ljava/lang/String; (Ljava/lang/module/ModuleDescriptor;)Ljava/lang/String; +@lambda-proxy jdk/internal/module/DefaultRoots apply ()Ljava/util/function/Function; (Ljava/lang/Object;)Ljava/lang/Object; REF_invokeVirtual java/lang/module/ModuleReference descriptor ()Ljava/lang/module/ModuleDescriptor; (Ljava/lang/module/ModuleReference;)Ljava/lang/module/ModuleDescriptor; +@lambda-proxy jdk/internal/module/DefaultRoots test ()Ljava/util/function/Predicate; (Ljava/lang/Object;)Z REF_invokeStatic jdk/internal/module/DefaultRoots lambda$compute$0 (Ljava/lang/module/ModuleReference;)Z (Ljava/lang/module/ModuleReference;)Z +@lambda-proxy jdk/internal/module/DefaultRoots test ()Ljava/util/function/Predicate; (Ljava/lang/Object;)Z REF_invokeStatic jdk/internal/module/DefaultRoots lambda$exportsAPI$2 (Ljava/lang/module/ModuleDescriptor$Exports;)Z (Ljava/lang/module/ModuleDescriptor$Exports;)Z +@lambda-proxy jdk/internal/module/DefaultRoots test (Ljava/lang/module/ModuleFinder;)Ljava/util/function/Predicate; (Ljava/lang/Object;)Z REF_invokeStatic jdk/internal/module/DefaultRoots lambda$compute$1 (Ljava/lang/module/ModuleFinder;Ljava/lang/module/ModuleDescriptor;)Z (Ljava/lang/module/ModuleDescriptor;)Z +@lambda-proxy jdk/internal/module/ModulePath apply ()Ljava/util/function/Function; (Ljava/lang/Object;)Ljava/lang/Object; REF_invokeVirtual java/util/Optional stream ()Ljava/util/stream/Stream; (Ljava/util/Optional;)Ljava/util/stream/Stream; +@lambda-proxy jdk/internal/module/ModulePath apply ()Ljava/util/function/Function; (Ljava/lang/Object;)Ljava/lang/Object; REF_invokeVirtual java/util/Optional stream ()Ljava/util/stream/Stream; (Ljava/util/Optional;)Ljava/util/stream/Stream; +@lambda-proxy jdk/internal/module/ModulePath apply ()Ljava/util/function/Function; (Ljava/lang/Object;)Ljava/lang/Object; REF_invokeVirtual java/util/zip/ZipEntry getName ()Ljava/lang/String; (Ljava/util/jar/JarEntry;)Ljava/lang/String; +@lambda-proxy jdk/internal/module/ModulePath apply (Ljdk/internal/module/ModulePath;)Ljava/util/function/Function; (Ljava/lang/Object;)Ljava/lang/Object; REF_invokeVirtual jdk/internal/module/ModulePath toPackageName (Ljava/lang/String;)Ljava/util/Optional; (Ljava/lang/String;)Ljava/util/Optional; +@lambda-proxy jdk/internal/module/ModulePath apply (Ljdk/internal/module/ModulePath;)Ljava/util/function/Function; (Ljava/lang/Object;)Ljava/lang/Object; REF_invokeVirtual jdk/internal/module/ModulePath toServiceName (Ljava/lang/String;)Ljava/util/Optional; (Ljava/lang/String;)Ljava/util/Optional; +@lambda-proxy jdk/internal/module/ModulePath test ()Ljava/util/function/Predicate; (Ljava/lang/Object;)Z REF_invokeStatic jdk/internal/module/ModulePath lambda$deriveModuleDescriptor$2 (Ljava/util/jar/JarEntry;)Z (Ljava/util/jar/JarEntry;)Z +@lambda-proxy jdk/internal/module/ModulePath test ()Ljava/util/function/Predicate; (Ljava/lang/Object;)Z REF_invokeStatic jdk/internal/module/ModulePath lambda$deriveModuleDescriptor$3 (Ljava/lang/String;)Z (Ljava/lang/String;)Z +@lambda-proxy jdk/internal/module/ModulePath test ()Ljava/util/function/Predicate; (Ljava/lang/Object;)Z REF_invokeStatic jdk/internal/module/ModulePath lambda$deriveModuleDescriptor$4 (Ljava/lang/String;)Z (Ljava/lang/String;)Z +@lambda-proxy jdk/internal/module/ModuleReferences generate (Ljava/util/function/Supplier;)Ljdk/internal/module/ModuleHashes$HashSupplier; (Ljava/lang/String;)[B REF_invokeStatic jdk/internal/module/ModuleReferences lambda$newJarModule$1 (Ljava/util/function/Supplier;Ljava/lang/String;)[B (Ljava/lang/String;)[B +@lambda-proxy jdk/internal/module/ModuleReferences get (Ljava/nio/file/Path;Ljava/net/URI;)Ljava/util/function/Supplier; ()Ljava/lang/Object; REF_invokeStatic jdk/internal/module/ModuleReferences lambda$newJarModule$0 (Ljava/nio/file/Path;Ljava/net/URI;)Ljava/lang/module/ModuleReader; ()Ljava/lang/module/ModuleReader; +@lambda-proxy sun/util/cldr/CLDRLocaleProviderAdapter run ()Ljava/security/PrivilegedExceptionAction; ()Ljava/lang/Object; REF_invokeStatic sun/util/cldr/CLDRLocaleProviderAdapter lambda$new$0 ()Lsun/util/locale/provider/LocaleDataMetaInfo; ()Lsun/util/locale/provider/LocaleDataMetaInfo; +@lambda-proxy sun/util/cldr/CLDRLocaleProviderAdapter run (Lsun/util/cldr/CLDRLocaleProviderAdapter;)Ljava/security/PrivilegedAction; ()Ljava/lang/Object; REF_invokeVirtual sun/util/cldr/CLDRLocaleProviderAdapter lambda$getCalendarDataProvider$1 ()Ljava/util/spi/CalendarDataProvider; ()Ljava/util/spi/CalendarDataProvider; +@lambda-proxy sun/util/locale/provider/JRELocaleProviderAdapter run (Lsun/util/locale/provider/JRELocaleProviderAdapter;)Ljava/security/PrivilegedAction; ()Ljava/lang/Object; REF_invokeVirtual sun/util/locale/provider/JRELocaleProviderAdapter lambda$getCalendarProvider$11 ()Lsun/util/spi/CalendarProvider; ()Lsun/util/spi/CalendarProvider; +@lambda-proxy sun/util/locale/provider/JRELocaleProviderAdapter run (Lsun/util/locale/provider/JRELocaleProviderAdapter;)Ljava/security/PrivilegedAction; ()Ljava/lang/Object; REF_invokeVirtual sun/util/locale/provider/JRELocaleProviderAdapter lambda$getDateFormatProvider$2 ()Ljava/text/spi/DateFormatProvider; ()Ljava/text/spi/DateFormatProvider; +@lambda-proxy sun/util/locale/provider/JRELocaleProviderAdapter run (Lsun/util/locale/provider/JRELocaleProviderAdapter;)Ljava/security/PrivilegedAction; ()Ljava/lang/Object; REF_invokeVirtual sun/util/locale/provider/JRELocaleProviderAdapter lambda$getDateFormatSymbolsProvider$3 ()Ljava/text/spi/DateFormatSymbolsProvider; ()Ljava/text/spi/DateFormatSymbolsProvider; +@lambda-proxy sun/util/locale/provider/JRELocaleProviderAdapter run (Lsun/util/locale/provider/JRELocaleProviderAdapter;)Ljava/security/PrivilegedAction; ()Ljava/lang/Object; REF_invokeVirtual sun/util/locale/provider/JRELocaleProviderAdapter lambda$getDecimalFormatSymbolsProvider$4 ()Ljava/text/spi/DecimalFormatSymbolsProvider; ()Ljava/text/spi/DecimalFormatSymbolsProvider; +@lambda-proxy sun/util/locale/provider/JRELocaleProviderAdapter run (Lsun/util/locale/provider/JRELocaleProviderAdapter;)Ljava/security/PrivilegedAction; ()Ljava/lang/Object; REF_invokeVirtual sun/util/locale/provider/JRELocaleProviderAdapter lambda$getNumberFormatProvider$5 ()Ljava/text/spi/NumberFormatProvider; ()Ljava/text/spi/NumberFormatProvider; diff --git a/install-packages/windows/bin/jre/lib/cmm/CIEXYZ.pf b/install-packages/windows/bin/jre/lib/cmm/CIEXYZ.pf deleted file mode 100644 index 48c9dd803..000000000 Binary files a/install-packages/windows/bin/jre/lib/cmm/CIEXYZ.pf and /dev/null differ diff --git a/install-packages/windows/bin/jre/lib/cmm/GRAY.pf b/install-packages/windows/bin/jre/lib/cmm/GRAY.pf deleted file mode 100644 index 8af309cc0..000000000 Binary files a/install-packages/windows/bin/jre/lib/cmm/GRAY.pf and /dev/null differ diff --git a/install-packages/windows/bin/jre/lib/cmm/LINEAR_RGB.pf b/install-packages/windows/bin/jre/lib/cmm/LINEAR_RGB.pf deleted file mode 100644 index 3e0b1777a..000000000 Binary files a/install-packages/windows/bin/jre/lib/cmm/LINEAR_RGB.pf and /dev/null differ diff --git a/install-packages/windows/bin/jre/lib/cmm/PYCC.pf b/install-packages/windows/bin/jre/lib/cmm/PYCC.pf deleted file mode 100644 index 0cee01589..000000000 Binary files a/install-packages/windows/bin/jre/lib/cmm/PYCC.pf and /dev/null differ diff --git a/install-packages/windows/bin/jre/lib/cmm/sRGB.pf b/install-packages/windows/bin/jre/lib/cmm/sRGB.pf deleted file mode 100644 index 7b552add6..000000000 Binary files a/install-packages/windows/bin/jre/lib/cmm/sRGB.pf and /dev/null differ diff --git a/install-packages/windows/bin/jre/lib/content-types.properties b/install-packages/windows/bin/jre/lib/content-types.properties deleted file mode 100644 index 894935256..000000000 --- a/install-packages/windows/bin/jre/lib/content-types.properties +++ /dev/null @@ -1,276 +0,0 @@ -#sun.net.www MIME content-types table -# -# Property fields: -# -# ::= 'description' '=' -# ::= 'file_extensions' '=' -# ::= 'icon' '=' -# ::= 'browser' | 'application' | 'save' | 'unknown' -# ::= 'application' '=' -# - -# -# The "we don't know anything about this data" type(s). -# Used internally to mark unrecognized types. -# -content/unknown: description=Unknown Content -unknown/unknown: description=Unknown Data Type - -# -# The template we should use for temporary files when launching an application -# to view a document of given type. -# -temp.file.template: c:\\temp\\%s - -# -# The "real" types. -# -application/octet-stream: \ - description=Generic Binary Stream;\ - file_extensions=.saveme,.dump,.hqx,.arc,.obj,.lib,.bin,.exe,.zip,.gz - -application/oda: \ - description=ODA Document;\ - file_extensions=.oda - -application/pdf: \ - description=Adobe PDF Format;\ - file_extensions=.pdf - -application/postscript: \ - description=Postscript File;\ - file_extensions=.eps,.ai,.ps;\ - icon=ps - -application/rtf: \ - description=Wordpad Document;\ - file_extensions=.rtf;\ - action=application;\ - application=wordpad.exe %s - -application/x-dvi: \ - description=TeX DVI File;\ - file_extensions=.dvi - -application/x-hdf: \ - description=Hierarchical Data Format;\ - file_extensions=.hdf;\ - action=save - -application/x-latex: \ - description=LaTeX Source;\ - file_extensions=.latex - -application/x-netcdf: \ - description=Unidata netCDF Data Format;\ - file_extensions=.nc,.cdf;\ - action=save - -application/x-tex: \ - description=TeX Source;\ - file_extensions=.tex - -application/x-texinfo: \ - description=Gnu Texinfo;\ - file_extensions=.texinfo,.texi - -application/x-troff: \ - description=Troff Source;\ - file_extensions=.t,.tr,.roff - -application/x-troff-man: \ - description=Troff Manpage Source;\ - file_extensions=.man - -application/x-troff-me: \ - description=Troff ME Macros;\ - file_extensions=.me - -application/x-troff-ms: \ - description=Troff MS Macros;\ - file_extensions=.ms - -application/x-wais-source: \ - description=Wais Source;\ - file_extensions=.src,.wsrc - -application/zip: \ - description=Zip File;\ - file_extensions=.zip;\ - icon=zip;\ - action=save - -application/x-bcpio: \ - description=Old Binary CPIO Archive;\ - file_extensions=.bcpio;\ - action=save - -application/x-cpio: \ - description=Unix CPIO Archive;\ - file_extensions=.cpio;\ - action=save - -application/x-gtar: \ - description=Gnu Tar Archive;\ - file_extensions=.gtar;\ - icon=tar;\ - action=save - -application/x-shar: \ - description=Shell Archive;\ - file_extensions=.sh,.shar;\ - action=save - -application/x-sv4cpio: \ - description=SVR4 CPIO Archive;\ - file_extensions=.sv4cpio;\ - action=save - -application/x-sv4crc: \ - description=SVR4 CPIO with CRC;\ - file_extensions=.sv4crc;\ - action=save - -application/x-tar: \ - description=Tar Archive;\ - file_extensions=.tar;\ - icon=tar;\ - action=save - -application/x-ustar: \ - description=US Tar Archive;\ - file_extensions=.ustar;\ - action=save - -audio/basic: \ - description=Basic Audio;\ - file_extensions=.snd,.au;\ - icon=audio - -audio/x-aiff: \ - description=Audio Interchange Format File;\ - file_extensions=.aifc,.aif,.aiff;\ - icon=aiff - -audio/x-wav: \ - description=Wav Audio;\ - file_extensions=.wav;\ - icon=wav;\ - action=application;\ - application=mplayer.exe %s - -image/gif: \ - description=GIF Image;\ - file_extensions=.gif;\ - icon=gif;\ - action=browser - -image/ief: \ - description=Image Exchange Format;\ - file_extensions=.ief - -image/jpeg: \ - description=JPEG Image;\ - file_extensions=.jfif,.jfif-tbnl,.jpe,.jpg,.jpeg;\ - icon=jpeg;\ - action=browser - -image/tiff: \ - description=TIFF Image;\ - file_extensions=.tif,.tiff;\ - icon=tiff - -image/vnd.fpx: \ - description=FlashPix Image;\ - file_extensions=.fpx,.fpix - -image/x-cmu-rast: \ - description=CMU Raster Image;\ - file_extensions=.ras - -image/x-portable-anymap: \ - description=PBM Anymap Image;\ - file_extensions=.pnm - -image/x-portable-bitmap: \ - description=PBM Bitmap Image;\ - file_extensions=.pbm - -image/x-portable-graymap: \ - description=PBM Graymap Image;\ - file_extensions=.pgm - -image/x-portable-pixmap: \ - description=PBM Pixmap Image;\ - file_extensions=.ppm - -image/x-rgb: \ - description=RGB Image;\ - file_extensions=.rgb - -image/x-xbitmap: \ - description=X Bitmap Image;\ - file_extensions=.xbm,.xpm - -image/x-xwindowdump: \ - description=X Window Dump Image;\ - file_extensions=.xwd - -image/png: \ - description=PNG Image;\ - file_extensions=.png;\ - icon=png;\ - action=browser - -image/bmp: \ - description=Bitmap Image;\ - file_extensions=.bmp; - -text/html: \ - description=HTML Document;\ - file_extensions=.htm,.html;\ - icon=html - -text/plain: \ - description=Plain Text;\ - file_extensions=.text,.c,.cc,.c++,.h,.pl,.txt,.java,.el;\ - icon=text;\ - action=browser - -text/tab-separated-values: \ - description=Tab Separated Values Text;\ - file_extensions=.tsv - -text/x-setext: \ - description=Structure Enhanced Text;\ - file_extensions=.etx - -video/mpeg: \ - description=MPEG Video Clip;\ - file_extensions=.mpg,.mpe,.mpeg;\ - icon=mpeg - -video/quicktime: \ - description=QuickTime Video Clip;\ - file_extensions=.mov,.qt - -application/x-troff-msvideo: \ - description=AVI Video;\ - file_extensions=.avi;\ - icon=avi;\ - action=application;\ - application=mplayer.exe %s - -video/x-sgi-movie: \ - description=SGI Movie;\ - file_extensions=.movie,.mv - -message/rfc822: \ - description=Internet Email Message;\ - file_extensions=.mime - -application/xml: \ - description=XML document;\ - file_extensions=.xml - - diff --git a/install-packages/windows/bin/jre/lib/flavormap.properties b/install-packages/windows/bin/jre/lib/flavormap.properties deleted file mode 100644 index c80f1cf90..000000000 --- a/install-packages/windows/bin/jre/lib/flavormap.properties +++ /dev/null @@ -1,77 +0,0 @@ -# -# This properties file is used to initialize the default -# java.awt.datatransfer.SystemFlavorMap. It contains the Win32 platform- -# specific, default mappings between common Win32 Clipboard atoms and platform- -# independent MIME type strings, which will be converted into -# java.awt.datatransfer.DataFlavors. -# -# These default mappings may be augmented by specifying the -# -# AWT.DnD.flavorMapFileURL -# -# property in the appropriate awt.properties file. The specified properties URL -# will be loaded into the SystemFlavorMap. -# -# The standard format is: -# -# = -# -# should be a string identifier that the native platform will -# recognize as a valid data format. should specify both a MIME -# primary type and a MIME subtype separated by a '/'. The MIME type may include -# parameters, where each parameter is a key/value pair separated by '=', and -# where each parameter to the MIME type is separated by a ';'. -# -# Because SystemFlavorMap implements FlavorTable, developers are free to -# duplicate both native keys and DataFlavor values. If a mapping contains a -# duplicate key or value, earlier mappings which included this key or value -# will be preferred. -# -# Mappings whose values specify DataFlavors with primary MIME types of -# "text", and which support the charset parameter, should specify the exact -# format in which the native platform expects the data. The "charset" -# parameter specifies the char to byte encoding, the "eoln" parameter -# specifies the end-of-line marker, and the "terminators" parameter specifies -# the number of terminating NUL bytes. Note that "eoln" and "terminators" -# are not standardized MIME type parameters. They are specific to this file -# format ONLY. They will not appear in any of the DataFlavors returned by the -# SystemFlavorMap at the Java level. -# -# If the "charset" parameter is omitted, or has zero length, the platform -# default encoding is assumed. If the "eoln" parameter is omitted, or has -# zero length, "\n" is assumed. If the "terminators" parameter is omitted, -# or has a value less than zero, zero is assumed. -# -# Upon initialization, the data transfer subsystem will record the specified -# details of the native text format, but the default SystemFlavorMap will -# present a large set of synthesized DataFlavors which map, in both -# directions, to the native. After receiving data from the application in one -# of the synthetic DataFlavors, the data transfer subsystem will transform -# the data stream into the format specified in this file before passing the -# transformed stream to the native system. -# -# Mappings whose values specify DataFlavors with primary MIME types of -# "text", but which do not support the charset parameter, will be treated as -# opaque, 8-bit data. They will not undergo any transformation process, and -# any "charset", "eoln", or "terminators" parameters specified in this file -# will be ignored. -# -# See java.awt.datatransfer.DataFlavor.selectBestTextFlavor for a list of -# text flavors which support the charset parameter. - -UNICODE\ TEXT=text/plain;charset=utf-16le;eoln="\r\n";terminators=2 -TEXT=text/plain;eoln="\r\n";terminators=1 -HTML\ Format=text/html;charset=utf-8;eoln="\r\n";terminators=1 -Rich\ Text\ Format=text/rtf -HDROP=application/x-java-file-list;class=java.util.List -PNG=image/x-java-image;class=java.awt.Image -JFIF=image/x-java-image;class=java.awt.Image -DIB=image/x-java-image;class=java.awt.Image -ENHMETAFILE=image/x-java-image;class=java.awt.Image -METAFILEPICT=image/x-java-image;class=java.awt.Image -LOCALE=application/x-java-text-encoding;class="[B" -UniformResourceLocator=application/x-java-url;class=java.net.URL -UniformResourceLocator=text/uri-list;eoln="\r\n";terminators=1 -UniformResourceLocator=text/plain;eoln="\r\n";terminators=1 -FileGroupDescriptorW=application/x-java-file-list;class=java.util.List -FileGroupDescriptor=application/x-java-file-list;class=java.util.List diff --git a/install-packages/windows/bin/jre/lib/hijrah-config-umalqura.properties b/install-packages/windows/bin/jre/lib/hijrah-config-umalqura.properties deleted file mode 100644 index 1786c14de..000000000 --- a/install-packages/windows/bin/jre/lib/hijrah-config-umalqura.properties +++ /dev/null @@ -1,369 +0,0 @@ -# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code 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 General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# -# This properties file defines a Hijrah calendar variant. -# -# Fields: -# -# ::= 'version' '=' -# ::= 'id' '=' -# ::= 'type' '=' -# ::= 'iso-start' '=' -# ::= '=' -# -# version ... (Required) -# -# id ... (Required) -# Identifies the Java Chronology -# -# type ... (Required) -# Identifies the type of calendar in the standard calendar ID scheme -# iso-start ... (Required) -# Specifies the corresponding ISO date to the first Hijrah day -# in the defined range of dates -# -# year ... (Required) -# Number of days for each month of a Hijrah year -# * Each line defines a year. The years must be in chronological -# order and no gap is allowed. -# * Each line is in the form indicated above. is a Hijrah year and -# nn is the number of days for a month listed in the order of the months. -# * Each year must have 12 months. -# * Each month should be 29 or 30 days long. -# * There must be one or more space characters between the months. -# - -# Version of this definition -version=1.8.0_1 - -# Java chronology ID -id=Hijrah-umalqura - -# Standard calendar type specification -type=islamic-umalqura - -# defines the corresponding ISO date to the earliest Hijrah date -iso-start=1882-11-12 - -# 1 2 3 4 5 6 7 8 9 10 11 12 -1300=30 29 30 29 30 29 30 29 30 29 30 29 -1301=30 30 29 30 29 30 29 30 29 30 29 29 -1302=30 30 30 29 30 30 29 29 30 29 29 30 -1303=29 30 30 29 30 30 29 30 29 30 29 29 -1304=29 30 30 29 30 30 30 29 30 29 30 29 -1305=29 29 30 30 29 30 30 29 30 30 29 29 -1306=30 29 30 29 30 29 30 29 30 30 29 30 -1307=29 30 29 30 29 30 29 30 29 30 29 30 -1308=29 30 30 29 30 29 30 29 30 29 29 30 -1309=29 30 30 30 30 29 29 30 29 29 30 29 -1310=30 29 30 30 30 29 30 29 30 29 29 30 -1311=29 30 29 30 30 30 29 30 29 30 29 29 -1312=30 29 30 29 30 30 29 30 30 29 30 29 -1313=29 30 29 30 29 30 29 30 30 30 29 29 -1314=30 30 29 30 29 29 30 29 30 30 29 30 -1315=29 30 30 29 30 29 29 30 29 30 29 30 -1316=29 30 30 30 29 30 29 29 30 29 30 29 -1317=30 29 30 30 29 30 29 30 29 30 29 29 -1318=30 29 30 30 29 30 30 29 30 29 30 29 -1319=29 30 29 30 30 29 30 29 30 30 29 30 -1320=29 30 29 29 30 29 30 29 30 30 30 29 -1321=30 29 30 29 29 30 29 29 30 30 30 30 -1322=29 30 29 30 29 29 29 30 29 30 30 30 -1323=29 30 30 29 30 29 29 29 30 29 30 30 -1324=29 30 30 29 30 29 30 29 29 30 29 30 -1325=30 29 30 29 30 30 29 30 29 30 29 30 -1326=29 29 30 29 30 30 29 30 29 30 30 29 -1327=30 29 29 30 29 30 29 30 30 29 30 30 -1328=29 30 29 29 30 29 29 30 30 30 29 30 -1329=30 29 30 29 29 30 29 29 30 30 29 30 -1330=30 30 29 30 29 29 30 29 29 30 30 29 -1331=30 30 29 30 30 29 29 30 29 30 29 30 -1332=29 30 29 30 30 29 30 29 30 30 29 29 -1333=30 29 29 30 30 29 30 30 29 30 30 29 -1334=29 29 30 29 30 29 30 30 30 29 30 29 -1335=30 29 30 29 29 30 29 30 30 29 30 30 -1336=29 30 29 30 29 29 30 29 30 29 30 30 -1337=30 29 30 29 30 29 29 30 29 30 29 30 -1338=29 30 30 29 30 30 29 29 30 29 30 29 -1339=30 29 30 29 30 30 30 29 30 29 29 30 -1340=29 29 30 29 30 30 30 30 29 30 29 29 -1341=30 29 29 30 29 30 30 30 29 30 30 29 -1342=29 29 30 29 30 29 30 30 29 30 30 29 -1343=30 29 29 30 29 30 29 30 29 30 30 29 -1344=30 29 30 29 30 30 29 29 30 29 30 29 -1345=30 29 30 30 30 29 30 29 29 30 29 29 -1346=30 29 30 30 30 30 29 30 29 29 30 29 -1347=29 30 29 30 30 30 29 30 30 29 29 30 -1348=29 29 30 29 30 30 29 30 30 30 29 29 -1349=30 29 29 30 29 30 30 29 30 30 29 30 -1350=29 30 29 30 29 30 29 29 30 30 29 30 -1351=30 29 30 29 30 29 30 29 29 30 29 30 -1352=30 29 30 30 29 30 29 30 29 29 30 29 -1353=30 29 30 30 30 29 30 29 29 30 29 30 -1354=29 30 29 30 30 29 30 30 29 30 29 29 -1355=30 29 29 30 30 29 30 30 29 30 30 29 -1356=29 30 29 30 29 30 29 30 29 30 30 30 -1357=29 29 30 29 30 29 29 30 29 30 30 30 -1358=29 30 29 30 29 30 29 29 30 29 30 30 -1359=29 30 30 29 30 29 30 29 29 29 30 30 -1360=29 30 30 30 29 30 29 30 29 29 30 29 -1361=30 29 30 30 29 30 30 29 29 30 29 30 -1362=29 30 29 30 29 30 30 29 30 29 30 29 -1363=30 29 30 29 30 29 30 29 30 29 30 30 -1364=29 30 29 30 29 29 30 29 30 29 30 30 -1365=30 30 29 29 30 29 29 30 29 30 29 30 -1366=30 30 29 30 29 30 29 29 30 29 30 29 -1367=30 30 29 30 30 29 30 29 29 30 29 30 -1368=29 30 29 30 30 30 29 29 30 29 30 29 -1369=30 29 30 29 30 30 29 30 29 30 30 29 -1370=30 29 29 30 29 30 29 30 29 30 30 30 -1371=29 30 29 29 30 29 30 29 30 29 30 30 -1372=30 29 29 30 29 30 29 29 30 29 30 30 -1373=30 29 30 29 30 29 30 29 29 30 29 30 -1374=30 29 30 30 29 30 29 30 29 29 30 29 -1375=30 29 30 30 29 30 30 29 30 29 30 29 -1376=29 30 29 30 29 30 30 30 29 30 29 30 -1377=29 29 30 29 29 30 30 30 29 30 30 29 -1378=30 29 29 29 30 29 30 30 29 30 30 30 -1379=29 30 29 29 29 30 29 30 30 29 30 30 -1380=29 30 29 30 29 30 29 30 29 30 29 30 -1381=29 30 29 30 30 29 30 29 30 29 29 30 -1382=29 30 29 30 30 29 30 30 29 30 29 29 -1383=30 29 29 30 30 30 29 30 30 29 30 29 -1384=29 30 29 29 30 30 29 30 30 30 29 30 -1385=29 29 30 29 29 30 30 29 30 30 30 29 -1386=30 29 29 30 29 29 30 30 29 30 30 29 -1387=30 29 30 29 30 29 30 29 30 29 30 29 -1388=30 30 29 30 29 30 29 30 29 30 29 29 -1389=30 30 29 30 30 29 30 30 29 29 30 29 -1390=29 30 29 30 30 30 29 30 29 30 29 30 -1391=29 29 30 29 30 30 29 30 30 29 30 29 -1392=30 29 29 30 29 30 29 30 30 29 30 30 -1393=29 30 29 29 30 29 30 29 30 29 30 30 -1394=30 29 30 29 29 30 29 30 29 30 29 30 -1395=30 29 30 30 29 30 29 29 30 29 29 30 -1396=30 29 30 30 29 30 30 29 29 30 29 29 -1397=30 29 30 30 29 30 30 30 29 29 29 30 -1398=29 30 29 30 30 29 30 30 29 30 29 29 -1399=30 29 30 29 30 29 30 30 29 30 29 30 -1400=30 29 30 29 29 30 29 30 29 30 29 30 -1401=30 30 29 30 29 29 30 29 29 30 29 30 -1402=30 30 30 29 30 29 29 30 29 29 30 29 -1403=30 30 30 29 30 30 29 29 30 29 29 30 -1404=29 30 30 29 30 30 29 30 29 30 29 29 -1405=30 29 30 29 30 30 30 29 30 29 29 30 -1406=30 29 29 30 29 30 30 29 30 29 30 30 -1407=29 30 29 29 30 29 30 29 30 29 30 30 -1408=30 29 30 29 30 29 29 30 29 29 30 30 -1409=30 30 29 30 29 30 29 29 30 29 29 30 -1410=30 30 29 30 30 29 30 29 29 30 29 29 -1411=30 30 29 30 30 29 30 30 29 29 30 29 -1412=30 29 30 29 30 29 30 30 30 29 29 30 -1413=29 30 29 29 30 29 30 30 30 29 30 29 -1414=30 29 30 29 29 30 29 30 30 29 30 30 -1415=29 30 29 30 29 29 30 29 30 29 30 30 -1416=30 29 30 29 30 29 29 30 29 30 29 30 -1417=30 29 30 30 29 29 30 29 30 29 30 29 -1418=30 29 30 30 29 30 29 30 29 30 29 30 -1419=29 30 29 30 29 30 29 30 30 30 29 29 -1420=29 30 29 29 30 29 30 30 30 30 29 30 -1421=29 29 30 29 29 29 30 30 30 30 29 30 -1422=30 29 29 30 29 29 29 30 30 30 29 30 -1423=30 29 30 29 30 29 29 30 29 30 29 30 -1424=30 29 30 30 29 30 29 29 30 29 30 29 -1425=30 29 30 30 29 30 29 30 30 29 30 29 -1426=29 30 29 30 29 30 30 29 30 30 29 30 -1427=29 29 30 29 30 29 30 30 29 30 30 29 -1428=30 29 29 30 29 29 30 30 30 29 30 30 -1429=29 30 29 29 30 29 29 30 30 29 30 30 -1430=29 30 30 29 29 30 29 30 29 30 29 30 -1431=29 30 30 29 30 29 30 29 30 29 29 30 -1432=29 30 30 30 29 30 29 30 29 30 29 29 -1433=30 29 30 30 29 30 30 29 30 29 30 29 -1434=29 30 29 30 29 30 30 29 30 30 29 29 -1435=30 29 30 29 30 29 30 29 30 30 29 30 -1436=29 30 29 30 29 30 29 30 29 30 29 30 -1437=30 29 30 30 29 29 30 29 30 29 29 30 -1438=30 29 30 30 30 29 29 30 29 29 30 29 -1439=30 29 30 30 30 29 30 29 30 29 29 30 -1440=29 30 29 30 30 30 29 30 29 30 29 29 -1441=30 29 30 29 30 30 29 30 30 29 30 29 -1442=29 30 29 30 29 30 29 30 30 29 30 29 -1443=30 29 30 29 30 29 30 29 30 29 30 30 -1444=29 30 29 30 30 29 29 30 29 30 29 30 -1445=29 30 30 30 29 30 29 29 30 29 29 30 -1446=29 30 30 30 29 30 30 29 29 30 29 29 -1447=30 29 30 30 30 29 30 29 30 29 30 29 -1448=29 30 29 30 30 29 30 30 29 30 29 30 -1449=29 29 30 29 30 29 30 30 29 30 30 29 -1450=30 29 30 29 29 30 29 30 29 30 30 29 -1451=30 30 30 29 29 30 29 29 30 30 29 30 -1452=30 29 30 30 29 29 30 29 29 30 29 30 -1453=30 29 30 30 29 30 29 30 29 29 30 29 -1454=30 29 30 30 29 30 30 29 30 29 30 29 -1455=29 30 29 30 30 29 30 29 30 30 29 30 -1456=29 29 30 29 30 29 30 29 30 30 30 29 -1457=30 29 29 30 29 29 30 29 30 30 30 30 -1458=29 30 29 29 30 29 29 30 29 30 30 30 -1459=29 30 30 29 29 30 29 29 30 29 30 30 -1460=29 30 30 29 30 29 30 29 29 30 29 30 -1461=29 30 30 29 30 29 30 29 30 30 29 29 -1462=30 29 30 29 30 30 29 30 29 30 30 29 -1463=29 30 29 30 29 30 29 30 30 30 29 30 -1464=29 30 29 29 30 29 29 30 30 30 29 30 -1465=30 29 30 29 29 30 29 29 30 30 29 30 -1466=30 30 29 30 29 29 29 30 29 30 30 29 -1467=30 30 29 30 30 29 29 30 29 30 29 30 -1468=29 30 29 30 30 29 30 29 30 29 30 29 -1469=29 30 29 30 30 29 30 30 29 30 29 30 -1470=29 29 30 29 30 30 29 30 30 29 30 29 -1471=30 29 29 30 29 30 29 30 30 29 30 30 -1472=29 30 29 29 30 29 30 29 30 30 29 30 -1473=29 30 29 30 30 29 29 30 29 30 29 30 -1474=29 30 30 29 30 30 29 29 30 29 30 29 -1475=29 30 30 29 30 30 30 29 29 30 29 29 -1476=30 29 30 29 30 30 30 29 30 29 30 29 -1477=29 30 29 29 30 30 30 30 29 30 29 30 -1478=29 29 30 29 30 29 30 30 29 30 30 29 -1479=30 29 29 30 29 30 29 30 29 30 30 29 -1480=30 29 30 29 30 29 30 29 30 29 30 29 -1481=30 29 30 30 29 30 29 30 29 30 29 29 -1482=30 29 30 30 30 30 29 30 29 29 30 29 -1483=29 30 29 30 30 30 29 30 30 29 29 30 -1484=29 29 30 29 30 30 30 29 30 29 30 29 -1485=30 29 29 30 29 30 30 29 30 30 29 30 -1486=29 30 29 29 30 29 30 29 30 30 29 30 -1487=30 29 30 29 30 29 29 30 29 30 29 30 -1488=30 29 30 30 29 30 29 29 30 29 30 29 -1489=30 29 30 30 30 29 30 29 29 30 29 30 -1490=29 30 29 30 30 29 30 30 29 29 30 29 -1491=30 29 29 30 30 29 30 30 29 30 29 30 -1492=29 30 29 29 30 30 29 30 29 30 30 29 -1493=30 29 30 29 30 29 29 30 29 30 30 30 -1494=29 30 29 30 29 30 29 29 29 30 30 30 -1495=29 30 30 29 30 29 29 30 29 29 30 30 -1496=29 30 30 30 29 30 29 29 30 29 29 30 -1497=30 29 30 30 29 30 29 30 29 30 29 30 -1498=29 30 29 30 29 30 30 29 30 29 30 29 -1499=30 29 30 29 29 30 30 29 30 29 30 30 -1500=29 30 29 30 29 29 30 29 30 29 30 30 -1501=30 29 30 29 30 29 29 29 30 29 30 30 -1502=30 30 29 30 29 30 29 29 29 30 30 29 -1503=30 30 29 30 30 29 30 29 29 29 30 30 -1504=29 30 29 30 30 30 29 29 30 29 30 29 -1505=30 29 30 29 30 30 29 30 29 30 30 29 -1506=29 30 29 29 30 30 29 30 30 29 30 30 -1507=29 29 30 29 29 30 30 29 30 29 30 30 -1508=30 29 29 30 29 30 29 29 30 29 30 30 -1509=30 29 30 29 30 29 30 29 29 30 29 30 -1510=30 29 30 30 29 30 29 30 29 29 30 29 -1511=30 29 30 30 29 30 30 29 30 29 29 30 -1512=29 30 29 30 29 30 30 30 29 30 29 30 -1513=29 29 29 30 29 30 30 30 29 30 30 29 -1514=30 29 29 29 30 29 30 30 29 30 30 30 -1515=29 29 30 29 29 30 29 30 30 29 30 30 -1516=29 30 29 30 29 29 30 29 30 29 30 30 -1517=29 30 29 30 29 30 30 29 29 30 29 30 -1518=29 30 29 30 30 29 30 30 29 30 29 29 -1519=30 29 29 30 30 30 29 30 30 29 30 29 -1520=29 30 29 29 30 30 30 29 30 30 29 30 -1521=29 29 29 30 29 30 30 29 30 30 29 30 -1522=30 29 29 29 30 29 30 30 29 30 30 29 -1523=30 29 30 29 30 29 30 29 29 30 30 29 -1524=30 30 29 30 29 30 29 30 29 29 30 29 -1525=30 30 29 30 30 29 30 29 30 29 29 30 -1526=29 30 29 30 30 30 29 30 29 30 29 29 -1527=30 29 30 29 30 30 29 30 30 29 30 29 -1528=30 29 29 30 29 30 29 30 30 29 30 30 -1529=29 30 29 29 30 29 30 29 30 29 30 30 -1530=29 30 30 29 29 30 29 30 29 29 30 30 -1531=29 30 30 30 29 29 30 29 30 29 29 30 -1532=29 30 30 30 29 30 30 29 29 29 30 29 -1533=30 29 30 30 30 29 30 29 30 29 29 30 -1534=29 30 29 30 30 29 30 30 29 29 30 29 -1535=30 29 30 29 30 29 30 30 29 30 29 30 -1536=29 30 29 30 29 30 29 30 29 30 29 30 -1537=30 29 30 30 29 29 30 29 29 30 29 30 -1538=30 30 29 30 30 29 29 30 29 29 30 29 -1539=30 30 30 29 30 30 29 29 30 29 29 30 -1540=29 30 30 29 30 30 29 30 29 29 30 29 -1541=30 29 30 29 30 30 30 29 30 29 29 30 -1542=29 30 29 30 29 30 30 29 30 29 30 30 -1543=29 30 29 29 30 29 30 29 30 29 30 30 -1544=30 29 30 29 29 30 29 30 29 30 29 30 -1545=30 30 29 30 29 29 30 29 30 29 29 30 -1546=30 30 29 30 29 30 29 30 29 30 29 29 -1547=30 30 29 30 30 29 30 29 30 29 30 29 -1548=30 29 29 30 30 29 30 30 29 30 29 30 -1549=29 30 29 29 30 29 30 30 30 29 30 29 -1550=30 29 30 29 29 29 30 30 30 29 30 30 -1551=29 30 29 29 30 29 29 30 30 29 30 30 -1552=30 29 30 29 29 30 29 29 30 30 29 30 -1553=30 29 30 29 30 29 30 29 30 29 30 29 -1554=30 29 30 29 30 30 29 30 29 30 29 30 -1555=29 29 30 29 30 30 29 30 30 29 30 29 -1556=30 29 29 30 29 30 29 30 30 30 29 30 -1557=29 30 29 29 29 30 29 30 30 30 30 29 -1558=30 29 30 29 29 29 30 29 30 30 30 29 -1559=30 30 29 29 30 29 29 30 30 29 30 29 -1560=30 30 29 30 29 30 29 30 29 30 29 30 -1561=29 30 30 29 30 29 30 30 29 29 30 29 -1562=29 30 30 29 30 29 30 30 30 29 29 30 -1563=29 30 29 29 30 29 30 30 30 29 30 29 -1564=30 29 30 29 29 30 29 30 30 30 29 30 -1565=29 30 29 30 29 29 30 29 30 30 29 30 -1566=30 29 30 29 30 29 29 30 29 30 29 30 -1567=30 29 30 30 29 30 29 30 29 29 30 29 -1568=30 29 30 30 30 29 30 29 30 29 29 29 -1569=30 29 30 30 30 29 30 30 29 30 29 29 -1570=29 30 29 30 30 29 30 30 30 29 29 30 -1571=29 29 30 29 30 30 29 30 30 29 30 29 -1572=30 29 29 30 29 30 29 30 30 29 30 29 -1573=30 29 30 30 29 30 29 29 30 29 30 29 -1574=30 30 29 30 30 29 30 29 29 30 29 29 -1575=30 30 30 29 30 30 29 30 29 29 29 30 -1576=29 30 30 29 30 30 30 29 30 29 29 29 -1577=30 29 30 30 29 30 30 29 30 29 30 29 -1578=29 30 29 30 29 30 30 29 30 30 29 30 -1579=29 30 29 30 29 29 30 30 29 30 29 30 -1580=29 30 30 29 30 29 29 30 29 30 29 30 -1581=30 30 29 30 29 30 29 29 30 29 30 29 -1582=30 30 29 30 30 29 30 29 30 29 29 29 -1583=30 30 29 30 30 30 29 30 29 30 29 29 -1584=29 30 30 29 30 30 29 30 30 29 30 29 -1585=29 30 29 30 29 30 29 30 30 29 30 30 -1586=29 29 30 29 30 29 29 30 30 30 29 30 -1587=29 30 30 29 29 29 30 29 30 29 30 30 -1588=30 29 30 30 29 29 29 30 29 30 29 30 -1589=30 29 30 30 29 30 29 29 30 29 30 29 -1590=30 29 30 30 30 29 29 30 29 30 29 30 -1591=29 30 29 30 30 29 30 29 30 29 30 29 -1592=30 29 30 29 30 29 30 29 30 30 30 29 -1593=30 29 29 30 29 29 30 29 30 30 30 29 -1594=30 30 29 29 30 29 29 29 30 30 30 30 -1595=29 30 29 30 29 29 30 29 29 30 30 30 -1596=29 30 30 29 30 29 29 30 29 30 29 30 -1597=29 30 30 29 30 29 30 29 30 29 30 29 -1598=30 29 30 29 30 30 29 30 29 30 30 29 -1599=29 30 29 30 29 30 29 30 30 30 29 30 -1600=29 29 30 29 30 29 29 30 30 30 29 30 diff --git a/install-packages/windows/bin/jre/lib/images/cursors/cursors.properties b/install-packages/windows/bin/jre/lib/images/cursors/cursors.properties deleted file mode 100644 index 77ce9250b..000000000 --- a/install-packages/windows/bin/jre/lib/images/cursors/cursors.properties +++ /dev/null @@ -1,40 +0,0 @@ -# -# -# Cursors Properties file -# -# Names GIF89 sources for Custom Cursors and their associated HotSpots -# -# Note: the syntax of the property name is significant and is parsed -# by java.awt.Cursor -# -# The syntax is: Cursor...File=win32_ -# Cursor...HotSpot=, -# Cursor...Name= -# -Cursor.CopyDrop.32x32.File=win32_CopyDrop32x32.gif -Cursor.CopyDrop.32x32.HotSpot=0,0 -Cursor.CopyDrop.32x32.Name=CopyDrop32x32 -# -Cursor.MoveDrop.32x32.File=win32_MoveDrop32x32.gif -Cursor.MoveDrop.32x32.HotSpot=0,0 -Cursor.MoveDrop.32x32.Name=MoveDrop32x32 -# -Cursor.LinkDrop.32x32.File=win32_LinkDrop32x32.gif -Cursor.LinkDrop.32x32.HotSpot=0,0 -Cursor.LinkDrop.32x32.Name=LinkDrop32x32 -# -Cursor.CopyNoDrop.32x32.File=win32_CopyNoDrop32x32.gif -Cursor.CopyNoDrop.32x32.HotSpot=6,2 -Cursor.CopyNoDrop.32x32.Name=CopyNoDrop32x32 -# -Cursor.MoveNoDrop.32x32.File=win32_MoveNoDrop32x32.gif -Cursor.MoveNoDrop.32x32.HotSpot=6,2 -Cursor.MoveNoDrop.32x32.Name=MoveNoDrop32x32 -# -Cursor.LinkNoDrop.32x32.File=win32_LinkNoDrop32x32.gif -Cursor.LinkNoDrop.32x32.HotSpot=6,2 -Cursor.LinkNoDrop.32x32.Name=LinkNoDrop32x32 -# -Cursor.Invalid.32x32.File=invalid32x32.gif -Cursor.Invalid.32x32.HotSpot=6,2 -Cursor.Invalid.32x32.Name=Invalid32x32 diff --git a/install-packages/windows/bin/jre/lib/images/cursors/invalid32x32.gif b/install-packages/windows/bin/jre/lib/images/cursors/invalid32x32.gif deleted file mode 100644 index 64c265d3e..000000000 Binary files a/install-packages/windows/bin/jre/lib/images/cursors/invalid32x32.gif and /dev/null differ diff --git a/install-packages/windows/bin/jre/lib/images/cursors/win32_CopyDrop32x32.gif b/install-packages/windows/bin/jre/lib/images/cursors/win32_CopyDrop32x32.gif deleted file mode 100644 index 8a47b47f9..000000000 Binary files a/install-packages/windows/bin/jre/lib/images/cursors/win32_CopyDrop32x32.gif and /dev/null differ diff --git a/install-packages/windows/bin/jre/lib/images/cursors/win32_CopyNoDrop32x32.gif b/install-packages/windows/bin/jre/lib/images/cursors/win32_CopyNoDrop32x32.gif deleted file mode 100644 index 64c265d3e..000000000 Binary files a/install-packages/windows/bin/jre/lib/images/cursors/win32_CopyNoDrop32x32.gif and /dev/null differ diff --git a/install-packages/windows/bin/jre/lib/images/cursors/win32_LinkDrop32x32.gif b/install-packages/windows/bin/jre/lib/images/cursors/win32_LinkDrop32x32.gif deleted file mode 100644 index be3628fe8..000000000 Binary files a/install-packages/windows/bin/jre/lib/images/cursors/win32_LinkDrop32x32.gif and /dev/null differ diff --git a/install-packages/windows/bin/jre/lib/images/cursors/win32_LinkNoDrop32x32.gif b/install-packages/windows/bin/jre/lib/images/cursors/win32_LinkNoDrop32x32.gif deleted file mode 100644 index 64c265d3e..000000000 Binary files a/install-packages/windows/bin/jre/lib/images/cursors/win32_LinkNoDrop32x32.gif and /dev/null differ diff --git a/install-packages/windows/bin/jre/lib/images/cursors/win32_MoveDrop32x32.gif b/install-packages/windows/bin/jre/lib/images/cursors/win32_MoveDrop32x32.gif deleted file mode 100644 index a2d986bab..000000000 Binary files a/install-packages/windows/bin/jre/lib/images/cursors/win32_MoveDrop32x32.gif and /dev/null differ diff --git a/install-packages/windows/bin/jre/lib/images/cursors/win32_MoveNoDrop32x32.gif b/install-packages/windows/bin/jre/lib/images/cursors/win32_MoveNoDrop32x32.gif deleted file mode 100644 index 64c265d3e..000000000 Binary files a/install-packages/windows/bin/jre/lib/images/cursors/win32_MoveNoDrop32x32.gif and /dev/null differ diff --git a/install-packages/windows/bin/jre/lib/jvm.hprof.txt b/install-packages/windows/bin/jre/lib/jvm.hprof.txt deleted file mode 100644 index 3c8e5fcdb..000000000 --- a/install-packages/windows/bin/jre/lib/jvm.hprof.txt +++ /dev/null @@ -1,86 +0,0 @@ -Copyright (c) 2003, 2005, Oracle and/or its affiliates. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of Oracle nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -Header for -agentlib:hprof (or -Xrunhprof) ASCII Output (JDK 5.0 JVMTI based) - -WARNING! This file format is under development, and is subject to -change without notice. - -This file contains the following types of records: - -THREAD START -THREAD END mark the lifetime of Java threads - -TRACE represents a Java stack trace. Each trace consists - of a series of stack frames. Other records refer to - TRACEs to identify (1) where object allocations have - taken place, (2) the frames in which GC roots were - found, and (3) frequently executed methods. - -HEAP DUMP is a complete snapshot of all live objects in the Java - heap. Following distinctions are made: - - ROOT root set as determined by GC - CLS classes - OBJ instances - ARR arrays - -SITES is a sorted list of allocation sites. This identifies - the most heavily allocated object types, and the TRACE - at which those allocations occurred. - -CPU SAMPLES is a statistical profile of program execution. The VM - periodically samples all running threads, and assigns - a quantum to active TRACEs in those threads. Entries - in this record are TRACEs ranked by the percentage of - total quanta they consumed; top-ranked TRACEs are - typically hot spots in the program. - -CPU TIME is a profile of program execution obtained by measuring - the time spent in individual methods (excluding the time - spent in callees), as well as by counting the number of - times each method is called. Entries in this record are - TRACEs ranked by the percentage of total CPU time. The - "count" field indicates the number of times each TRACE - is invoked. - -MONITOR TIME is a profile of monitor contention obtained by measuring - the time spent by a thread waiting to enter a monitor. - Entries in this record are TRACEs ranked by the percentage - of total monitor contention time and a brief description - of the monitor. The "count" field indicates the number of - times the monitor was contended at that TRACE. - -MONITOR DUMP is a complete snapshot of all the monitors and threads in - the System. - -HEAP DUMP, SITES, CPU SAMPLES|TIME and MONITOR DUMP|TIME records are generated -at program exit. They can also be obtained during program execution by typing -Ctrl-\ (on Solaris) or by typing Ctrl-Break (on Win32). diff --git a/install-packages/windows/bin/jre/lib/logging.properties b/install-packages/windows/bin/jre/lib/logging.properties deleted file mode 100644 index 65cf1b1b7..000000000 --- a/install-packages/windows/bin/jre/lib/logging.properties +++ /dev/null @@ -1,59 +0,0 @@ -############################################################ -# Default Logging Configuration File -# -# You can use a different file by specifying a filename -# with the java.util.logging.config.file system property. -# For example java -Djava.util.logging.config.file=myfile -############################################################ - -############################################################ -# Global properties -############################################################ - -# "handlers" specifies a comma separated list of log Handler -# classes. These handlers will be installed during VM startup. -# Note that these classes must be on the system classpath. -# By default we only configure a ConsoleHandler, which will only -# show messages at the INFO and above levels. -handlers= java.util.logging.ConsoleHandler - -# To also add the FileHandler, use the following line instead. -#handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler - -# Default global logging level. -# This specifies which kinds of events are logged across -# all loggers. For any given facility this global level -# can be overriden by a facility specific level -# Note that the ConsoleHandler also has a separate level -# setting to limit messages printed to the console. -.level= INFO - -############################################################ -# Handler specific properties. -# Describes specific configuration info for Handlers. -############################################################ - -# default file output is in user's home directory. -java.util.logging.FileHandler.pattern = %h/java%u.log -java.util.logging.FileHandler.limit = 50000 -java.util.logging.FileHandler.count = 1 -java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter - -# Limit the message that are printed on the console to INFO and above. -java.util.logging.ConsoleHandler.level = INFO -java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter - -# Example to customize the SimpleFormatter output format -# to print one-line log message like this: -# : [] -# -# java.util.logging.SimpleFormatter.format=%4$s: %5$s [%1$tc]%n - -############################################################ -# Facility specific properties. -# Provides extra control for each logger. -############################################################ - -# For example, set the com.xyz.foo logger to only log SEVERE -# messages: -com.xyz.foo.level = SEVERE diff --git a/install-packages/windows/bin/jre/lib/management/jmxremote.access b/install-packages/windows/bin/jre/lib/management/jmxremote.access deleted file mode 100644 index ce80b47a1..000000000 --- a/install-packages/windows/bin/jre/lib/management/jmxremote.access +++ /dev/null @@ -1,79 +0,0 @@ -###################################################################### -# Default Access Control File for Remote JMX(TM) Monitoring -###################################################################### -# -# Access control file for Remote JMX API access to monitoring. -# This file defines the allowed access for different roles. The -# password file (jmxremote.password by default) defines the roles and their -# passwords. To be functional, a role must have an entry in -# both the password and the access files. -# -# The default location of this file is $JRE/lib/management/jmxremote.access -# You can specify an alternate location by specifying a property in -# the management config file $JRE/lib/management/management.properties -# (See that file for details) -# -# The file format for password and access files is syntactically the same -# as the Properties file format. The syntax is described in the Javadoc -# for java.util.Properties.load. -# A typical access file has multiple lines, where each line is blank, -# a comment (like this one), or an access control entry. -# -# An access control entry consists of a role name, and an -# associated access level. The role name is any string that does not -# itself contain spaces or tabs. It corresponds to an entry in the -# password file (jmxremote.password). The access level is one of the -# following: -# "readonly" grants access to read attributes of MBeans. -# For monitoring, this means that a remote client in this -# role can read measurements but cannot perform any action -# that changes the environment of the running program. -# "readwrite" grants access to read and write attributes of MBeans, -# to invoke operations on them, and optionally -# to create or remove them. This access should be granted -# only to trusted clients, since they can potentially -# interfere with the smooth operation of a running program. -# -# The "readwrite" access level can optionally be followed by the "create" and/or -# "unregister" keywords. The "unregister" keyword grants access to unregister -# (delete) MBeans. The "create" keyword grants access to create MBeans of a -# particular class or of any class matching a particular pattern. Access -# should only be granted to create MBeans of known and trusted classes. -# -# For example, the following entry would grant readwrite access -# to "controlRole", as well as access to create MBeans of the class -# javax.management.monitor.CounterMonitor and to unregister any MBean: -# controlRole readwrite \ -# create javax.management.monitor.CounterMonitorMBean \ -# unregister -# or equivalently: -# controlRole readwrite unregister create javax.management.monitor.CounterMBean -# -# The following entry would grant readwrite access as well as access to create -# MBeans of any class in the packages javax.management.monitor and -# javax.management.timer: -# controlRole readwrite \ -# create javax.management.monitor.*,javax.management.timer.* \ -# unregister -# -# The \ character is defined in the Properties file syntax to allow continuation -# lines as shown here. A * in a class pattern matches a sequence of characters -# other than dot (.), so javax.management.monitor.* matches -# javax.management.monitor.CounterMonitor but not -# javax.management.monitor.foo.Bar. -# -# A given role should have at most one entry in this file. If a role -# has no entry, it has no access. -# If multiple entries are found for the same role name, then the last -# access entry is used. -# -# -# Default access control entries: -# o The "monitorRole" role has readonly access. -# o The "controlRole" role has readwrite access and can create the standard -# Timer and Monitor MBeans defined by the JMX API. - -monitorRole readonly -controlRole readwrite \ - create javax.management.monitor.*,javax.management.timer.* \ - unregister diff --git a/install-packages/windows/bin/jre/lib/management/jmxremote.password.template b/install-packages/windows/bin/jre/lib/management/jmxremote.password.template deleted file mode 100644 index a7e7daac5..000000000 --- a/install-packages/windows/bin/jre/lib/management/jmxremote.password.template +++ /dev/null @@ -1,64 +0,0 @@ -# ---------------------------------------------------------------------- -# Template for jmxremote.password -# -# o Copy this template to jmxremote.password -# o Set the user/password entries in jmxremote.password -# o Change the permission of jmxremote.password to read-only -# by the owner. -# -# See below for the location of jmxremote.password file. -# ---------------------------------------------------------------------- - -############################################################## -# Password File for Remote JMX Monitoring -############################################################## -# -# Password file for Remote JMX API access to monitoring. This -# file defines the different roles and their passwords. The access -# control file (jmxremote.access by default) defines the allowed -# access for each role. To be functional, a role must have an entry -# in both the password and the access files. -# -# Default location of this file is $JRE/lib/management/jmxremote.password -# You can specify an alternate location by specifying a property in -# the management config file $JRE/lib/management/management.properties -# or by specifying a system property (See that file for details). - - -############################################################## -# File permissions of the jmxremote.password file -############################################################## -# Since there are cleartext passwords stored in this file, -# this file must be readable by ONLY the owner, -# otherwise the program will exit with an error. -# -# The file format for password and access files is syntactically the same -# as the Properties file format. The syntax is described in the Javadoc -# for java.util.Properties.load. -# Typical password file has multiple lines, where each line is blank, -# a comment (like this one), or a password entry. -# -# -# A password entry consists of a role name and an associated -# password. The role name is any string that does not itself contain -# spaces or tabs. The password is again any string that does not -# contain spaces or tabs. Note that passwords appear in the clear in -# this file, so it is a good idea not to use valuable passwords. -# -# A given role should have at most one entry in this file. If a role -# has no entry, it has no access. -# If multiple entries are found for the same role name, then the last one -# is used. -# -# In a typical installation, this file can be read by anybody on the -# local machine, and possibly by people on other machines. -# For # security, you should either restrict the access to this file, -# or specify another, less accessible file in the management config file -# as described above. -# -# Following are two commented-out entries. The "measureRole" role has -# password "QED". The "controlRole" role has password "R&D". -# -# monitorRole QED -# controlRole R&D - diff --git a/install-packages/windows/bin/jre/lib/management/management.properties b/install-packages/windows/bin/jre/lib/management/management.properties deleted file mode 100644 index 70efa2eef..000000000 --- a/install-packages/windows/bin/jre/lib/management/management.properties +++ /dev/null @@ -1,331 +0,0 @@ -##################################################################### -# Default Configuration File for Java Platform Management -##################################################################### -# -# The Management Configuration file (in java.util.Properties format) -# will be read if one of the following system properties is set: -# -Dcom.sun.management.jmxremote.port= -# or -Dcom.sun.management.snmp.port= -# or -Dcom.sun.management.config.file= -# -# The default Management Configuration file is: -# -# $JRE/lib/management/management.properties -# -# Another location for the Management Configuration File can be specified -# by the following property on the Java command line: -# -# -Dcom.sun.management.config.file= -# -# If -Dcom.sun.management.config.file= is set, the port -# number for the management agent can be specified in the config file -# using the following lines: -# -# ################ Management Agent Port ######################### -# -# For setting the JMX RMI agent port use the following line -# com.sun.management.jmxremote.port= -# -# For setting the SNMP agent port use the following line -# com.sun.management.snmp.port= - -##################################################################### -# Optional Instrumentation -##################################################################### -# -# By default only the basic instrumentation with low overhead is on. -# The following properties allow to selectively turn on optional -# instrumentation which are off by default and may have some -# additional overhead. -# -# com.sun.management.enableThreadContentionMonitoring -# -# This option enables thread contention monitoring if the -# Java virtual machine supports such instrumentation. -# Refer to the specification for the java.lang.management.ThreadMBean -# interface - see isThreadContentionMonitoringSupported() method. -# - -# To enable thread contention monitoring, uncomment the following line -# com.sun.management.enableThreadContentionMonitoring - -##################################################################### -# SNMP Management Properties -##################################################################### -# -# If the system property -Dcom.sun.management.snmp.port= -# is set then -# - The SNMP agent (with the Java virtual machine MIB) is started -# that listens on the specified port for incoming SNMP requests. -# - the following properties for read for SNMP management. -# -# The configuration can be specified only at startup time. -# Later changes to the above system property (e.g. via setProperty method), this -# config file, or the ACL file has no effect to the running SNMP agent. -# - -# -# ##################### SNMP Trap Port ######################### -# -# com.sun.management.snmp.trap= -# Specifies the remote port number at which managers are expected -# to listen for trap. For each host defined in the ACL file, -# the SNMP agent will send traps at : -# Default for this property is 162. -# - -# To set port for sending traps to a different port use the following line -# com.sun.management.snmp.trap= - -# -# ################ SNMP listen interface ######################### -# -# com.sun.management.snmp.interface= -# Specifies the local interface on which the SNMP agent will bind. -# This is useful when running on machines which have several -# interfaces defined. It makes it possible to listen to a specific -# subnet accessible through that interface. -# Default for this property is "localhost". -# -# The format of the value for that property is any string accepted -# by java.net.InetAddress.getByName(String). -# - -# For restricting the port on which SNMP agent listens use the following line -# com.sun.management.snmp.interface= - -# -# #################### SNMP ACL file ######################### -# -# com.sun.management.snmp.acl=true|false -# Default for this property is true. (Case for true/false ignored) -# If this property is specified as false then the ACL file -# is not checked: all manager hosts are allowed all access. -# - -# For SNMP without checking ACL file uncomment the following line -# com.sun.management.snmp.acl=false - -# -# com.sun.management.snmp.acl.file=filepath -# Specifies location for ACL file -# This is optional - default location is -# $JRE/lib/management/snmp.acl -# -# If the property "com.sun.management.snmp.acl" is set to false, -# then this property and the ACL file are ignored. -# Otherwise the ACL file must exist and be in the valid format. -# If the ACL file is empty or non existent then no access is allowed. -# -# The SNMP agent will read the ACL file at startup time. -# Modification to the ACL file has no effect to any running SNMP -# agents which read that ACL file at startup. -# - -# For a non-default acl file location use the following line -# com.sun.management.snmp.acl.file=filepath - -##################################################################### -# RMI Management Properties -##################################################################### -# -# If system property -Dcom.sun.management.jmxremote.port= -# is set then -# - A MBean server is started -# - JRE Platform MBeans are registered in the MBean server -# - RMI connector is published in a private readonly registry at -# specified port using a well known name, "jmxrmi" -# - the following properties are read for JMX remote management. -# -# The configuration can be specified only at startup time. -# Later changes to above system property (e.g. via setProperty method), -# this config file, the password file, or the access file have no effect to the -# running MBean server, the connector, or the registry. -# - -# -# ########## RMI connector settings for local management ########## -# -# com.sun.management.jmxremote.local.only=true|false -# Default for this property is true. (Case for true/false ignored) -# If this property is specified as true then the local JMX RMI connector -# server will only accept connection requests from clients running on -# the host where the out-of-the-box JMX management agent is running. -# In order to ensure backwards compatibility this property could be -# set to false. However, deploying the local management agent in this -# way is discouraged because the local JMX RMI connector server will -# accept connection requests from any client either local or remote. -# For remote management the remote JMX RMI connector server should -# be used instead with authentication and SSL/TLS encryption enabled. -# - -# For allowing the local management agent accept local -# and remote connection requests use the following line -# com.sun.management.jmxremote.local.only=false - -# -# ###################### RMI SSL ############################# -# -# com.sun.management.jmxremote.ssl=true|false -# Default for this property is true. (Case for true/false ignored) -# If this property is specified as false then SSL is not used. -# - -# For RMI monitoring without SSL use the following line -# com.sun.management.jmxremote.ssl=false - -# com.sun.management.jmxremote.ssl.config.file=filepath -# Specifies the location of the SSL configuration file. A properties -# file can be used to supply the keystore and truststore location and -# password settings thus avoiding to pass them as cleartext in the -# command-line. -# -# The current implementation of the out-of-the-box management agent will -# look up and use the properties specified below to configure the SSL -# keystore and truststore, if present: -# javax.net.ssl.keyStore= -# javax.net.ssl.keyStorePassword= -# javax.net.ssl.trustStore= -# javax.net.ssl.trustStorePassword= -# Any other properties in the file will be ignored. This will allow us -# to extend the property set in the future if required by the default -# SSL implementation. -# -# If the property "com.sun.management.jmxremote.ssl" is set to false, -# then this property is ignored. -# - -# For supplying the keystore settings in a file use the following line -# com.sun.management.jmxremote.ssl.config.file=filepath - -# com.sun.management.jmxremote.ssl.enabled.cipher.suites= -# The value of this property is a string that is a comma-separated list -# of SSL/TLS cipher suites to enable. This property can be specified in -# conjunction with the previous property "com.sun.management.jmxremote.ssl" -# in order to control which particular SSL/TLS cipher suites are enabled -# for use by accepted connections. If this property is not specified then -# the SSL/TLS RMI Server Socket Factory uses the SSL/TLS cipher suites that -# are enabled by default. -# - -# com.sun.management.jmxremote.ssl.enabled.protocols= -# The value of this property is a string that is a comma-separated list -# of SSL/TLS protocol versions to enable. This property can be specified in -# conjunction with the previous property "com.sun.management.jmxremote.ssl" -# in order to control which particular SSL/TLS protocol versions are -# enabled for use by accepted connections. If this property is not -# specified then the SSL/TLS RMI Server Socket Factory uses the SSL/TLS -# protocol versions that are enabled by default. -# - -# com.sun.management.jmxremote.ssl.need.client.auth=true|false -# Default for this property is false. (Case for true/false ignored) -# If this property is specified as true in conjunction with the previous -# property "com.sun.management.jmxremote.ssl" then the SSL/TLS RMI Server -# Socket Factory will require client authentication. -# - -# For RMI monitoring with SSL client authentication use the following line -# com.sun.management.jmxremote.ssl.need.client.auth=true - -# com.sun.management.jmxremote.registry.ssl=true|false -# Default for this property is false. (Case for true/false ignored) -# If this property is specified as true then the RMI registry used -# to bind the RMIServer remote object is protected with SSL/TLS -# RMI Socket Factories that can be configured with the properties: -# com.sun.management.jmxremote.ssl.config.file -# com.sun.management.jmxremote.ssl.enabled.cipher.suites -# com.sun.management.jmxremote.ssl.enabled.protocols -# com.sun.management.jmxremote.ssl.need.client.auth -# If the two properties below are true at the same time, i.e. -# com.sun.management.jmxremote.ssl=true -# com.sun.management.jmxremote.registry.ssl=true -# then the RMIServer remote object and the RMI registry are -# both exported with the same SSL/TLS RMI Socket Factories. -# - -# For using an SSL/TLS protected RMI registry use the following line -# com.sun.management.jmxremote.registry.ssl=true - -# -# ################ RMI User authentication ################ -# -# com.sun.management.jmxremote.authenticate=true|false -# Default for this property is true. (Case for true/false ignored) -# If this property is specified as false then no authentication is -# performed and all users are allowed all access. -# - -# For RMI monitoring without any checking use the following line -# com.sun.management.jmxremote.authenticate=false - -# -# ################ RMI Login configuration ################### -# -# com.sun.management.jmxremote.login.config= -# Specifies the name of a JAAS login configuration entry to use when -# authenticating users of RMI monitoring. -# -# Setting this property is optional - the default login configuration -# specifies a file-based authentication that uses the password file. -# -# When using this property to override the default login configuration -# then the named configuration entry must be in a file that gets loaded -# by JAAS. In addition, the login module(s) specified in the configuration -# should use the name and/or password callbacks to acquire the user's -# credentials. See the NameCallback and PasswordCallback classes in the -# javax.security.auth.callback package for more details. -# -# If the property "com.sun.management.jmxremote.authenticate" is set to -# false, then this property and the password & access files are ignored. -# - -# For a non-default login configuration use the following line -# com.sun.management.jmxremote.login.config= - -# -# ################ RMI Password file location ################## -# -# com.sun.management.jmxremote.password.file=filepath -# Specifies location for password file -# This is optional - default location is -# $JRE/lib/management/jmxremote.password -# -# If the property "com.sun.management.jmxremote.authenticate" is set to -# false, then this property and the password & access files are ignored. -# Otherwise the password file must exist and be in the valid format. -# If the password file is empty or non-existent then no access is allowed. -# - -# For a non-default password file location use the following line -# com.sun.management.jmxremote.password.file=filepath - -# -# ################ RMI Access file location ##################### -# -# com.sun.management.jmxremote.access.file=filepath -# Specifies location for access file -# This is optional - default location is -# $JRE/lib/management/jmxremote.access -# -# If the property "com.sun.management.jmxremote.authenticate" is set to -# false, then this property and the password & access files are ignored. -# Otherwise, the access file must exist and be in the valid format. -# If the access file is empty or non-existent then no access is allowed. -# - -# For a non-default password file location use the following line -# com.sun.management.jmxremote.access.file=filepath -# - -# ################ Management agent listen interface ######################### -# -# com.sun.management.jmxremote.host= -# Specifies the local interface on which the JMX RMI agent will bind. -# This is useful when running on machines which have several -# interfaces defined. It makes it possible to listen to a specific -# subnet accessible through that interface. -# -# The format of the value for that property is any string accepted -# by java.net.InetAddress.getByName(String). -# diff --git a/install-packages/windows/bin/jre/lib/management/snmp.acl.template b/install-packages/windows/bin/jre/lib/management/snmp.acl.template deleted file mode 100644 index 0e766764f..000000000 --- a/install-packages/windows/bin/jre/lib/management/snmp.acl.template +++ /dev/null @@ -1,110 +0,0 @@ -# ---------------------------------------------------------------------- -# Template for SNMP Access Control List File -# -# o Copy this template to snmp.acl -# o Set access control for SNMP support -# o Change the permission of snmp.acl to be read-only -# by the owner. -# -# See below for the location of snmp.acl file. -# ---------------------------------------------------------------------- - -############################################################ -# SNMP Access Control List File -############################################################ -# -# Default location of this file is $JRE/lib/management/snmp.acl. -# You can specify an alternate location by specifying a property in -# the management config file $JRE/lib/management/management.properties -# or by specifying a system property (See that file for details). -# - - -############################################################## -# File permissions of the snmp.acl file -############################################################## -# -# Since there are cleartext community strings stored in this file, -# this ACL file must be readable by ONLY the owner, -# otherwise the program will exit with an error. -# -############################################################## -# Format of the acl group -############################################################## -# -# communities: a list of SNMP community strings to which the -# access control applies separated by commas. -# -# access: either "read-only" or "read-write". -# -# managers: a list of hosts to be granted the access rights. -# Each can be expressed as any one of the following: -# - hostname: hubble -# - ip v4 and v6 addresses: 123.456.789.12 , fe80::a00:20ff:fe9b:ea82 -# - ip v4 and v6 netmask prefix notation: 123.456.789.0/24, -# fe80::a00:20ff:fe9b:ea82/64 -# see RFC 2373 (http://www.ietf.org/rfc/rfc2373.txt) -# -# An example of two community groups for multiple hosts: -# acl = { -# { -# communities = public, private -# access = read-only -# managers = hubble, snowbell, nanak -# } -# { -# communities = jerry -# access = read-write -# managers = hubble, telescope -# } -# } -# -############################################################## -# Format of the trap group -############################################################## -# -# trap-community: a single SNMP community string that will be included -# in the traps sent to the hosts. -# -# hosts: a list of hosts to which the SNMP agent will send traps. -# -# An example of two trap community definitions for multiple hosts: -# trap = { -# { -# trap-community = public -# hosts = hubble, snowbell -# } -# { -# trap-community = private -# hosts = telescope -# } -# } -# -############################################################ -# -# Update the community strings (public and private) below -# before copying this template file -# -# Common SNMP ACL Example -# ------------------------ -# -# o Only localhost can connect, and access rights -# are limited to read-only -# o Traps are sent to localhost only -# -# -# acl = { -# { -# communities = public, private -# access = read-only -# managers = localhost -# } -# } -# -# -# trap = { -# { -# trap-community = public -# hosts = localhost -# } -# } diff --git a/install-packages/windows/bin/jre/lib/meta-index b/install-packages/windows/bin/jre/lib/meta-index deleted file mode 100755 index b4f44d140..000000000 --- a/install-packages/windows/bin/jre/lib/meta-index +++ /dev/null @@ -1,88 +0,0 @@ -% VERSION 2 -% WARNING: this file is auto-generated; do not edit -% UNSUPPORTED: this file and its format may change and/or -% may be removed in a future release -# charsets.jar -sun/awt -sun/nio -! jce.jar -javax/crypto -sun/security -# jfr.jar -jdk/management -jdk/jfr -! jsse.jar -com/sun/net/ -sun/security -! management-agent.jar -@ resources.jar -META-INF/services/javax.sound.sampled.spi.AudioFileWriter -com/sun/imageio/ -sun/print -META-INF/mimetypes.default -META-INF/services/javax.sound.midi.spi.MidiDeviceProvider -com/sun/java/util/jar/pack/ -javax/swing -META-INF/services/sun.java2d.cmm.CMMServiceProvider -META-INF/services/javax.sound.midi.spi.SoundbankReader -META-INF/mailcap.default -META-INF/services/javax.print.PrintServiceLookup -com/sun/java/swing/ -META-INF/services/javax.sound.sampled.spi.MixerProvider -META-INF/services/javax.sound.midi.spi.MidiFileWriter -META-INF/services/sun.util.spi.XmlPropertiesProvider -javax/xml -sun/net -META-INF/services/javax.sound.sampled.spi.FormatConversionProvider -META-INF/services/sun.java2d.pipe.RenderingEngine -com/sun/jndi/ -javax/sql -com/sun/org/ -java/lang -sun/text -META-INF/services/com.sun.tools.internal.xjc.Plugin -sun/rmi -META-INF/services/javax.sound.midi.spi.MidiFileReader -META-INF/services/javax.sound.sampled.spi.AudioFileReader -META-INF/services/javax.print.StreamPrintServiceFactory -com/sun/corba/ -com/sun/rowset/ -com/sun/xml/ -META-INF/services/com.sun.tools.internal.ws.wscompile.Plugin -! rt.jar -com/sun/imageio/ -com/sun/rmi/ -com/sun/media/ -com/sun/security/ -com/sun/java_cup/ -com/oracle/ -org/ietf/ -com/sun/beans/ -com/sun/java/util/jar/pack/ -com/sun/naming/ -com/sun/management/ -com/sun/istack/ -java/ -com/sun/accessibility/ -sun/ -com/sun/java/swing/ -com/sun/swing/ -com/sun/demo/ -com/sun/nio/ -com/sun/jmx/ -com/sun/java/browser/ -org/omg/ -com/sun/awt/ -com/sun/jndi/ -com/sun/tracing/ -org/w3c/ -com/sun/org/ -jdk/ -com/sun/net/ -com/sun/activation/ -javax/ -org/jcp/ -org/xml/ -com/sun/corba/ -com/sun/rowset/ -com/sun/xml/ diff --git a/install-packages/windows/bin/jre/lib/net.properties b/install-packages/windows/bin/jre/lib/net.properties deleted file mode 100644 index a541eef9e..000000000 --- a/install-packages/windows/bin/jre/lib/net.properties +++ /dev/null @@ -1,121 +0,0 @@ -############################################################ -# Default Networking Configuration File -# -# This file may contain default values for the networking system properties. -# These values are only used when the system properties are not specified -# on the command line or set programatically. -# For now, only the various proxy settings can be configured here. -############################################################ - -# Whether or not the DefaultProxySelector will default to System Proxy -# settings when they do exist. -# Set it to 'true' to enable this feature and check for platform -# specific proxy settings -# Note that the system properties that do explicitely set proxies -# (like http.proxyHost) do take precedence over the system settings -# even if java.net.useSystemProxies is set to true. - -java.net.useSystemProxies=false - -#------------------------------------------------------------------------ -# Proxy configuration for the various protocol handlers. -# DO NOT uncomment these lines if you have set java.net.useSystemProxies -# to true as the protocol specific properties will take precedence over -# system settings. -#------------------------------------------------------------------------ - -# HTTP Proxy settings. proxyHost is the name of the proxy server -# (e.g. proxy.mydomain.com), proxyPort is the port number to use (default -# value is 80) and nonProxyHosts is a '|' separated list of hostnames which -# should be accessed directly, ignoring the proxy server (default value is -# localhost & 127.0.0.1). -# -# http.proxyHost= -# http.proxyPort=80 -http.nonProxyHosts=localhost|127.*|[::1] -# -# HTTPS Proxy Settings. proxyHost is the name of the proxy server -# (e.g. proxy.mydomain.com), proxyPort is the port number to use (default -# value is 443). The HTTPS protocol handlers uses the http nonProxyHosts list. -# -# https.proxyHost= -# https.proxyPort=443 -# -# FTP Proxy settings. proxyHost is the name of the proxy server -# (e.g. proxy.mydomain.com), proxyPort is the port number to use (default -# value is 80) and nonProxyHosts is a '|' separated list of hostnames which -# should be accessed directly, ignoring the proxy server (default value is -# localhost & 127.0.0.1). -# -# ftp.proxyHost= -# ftp.proxyPort=80 -ftp.nonProxyHosts=localhost|127.*|[::1] -# -# Gopher Proxy settings. proxyHost is the name of the proxy server -# (e.g. proxy.mydomain.com), proxyPort is the port number to use (default -# value is 80) -# -# gopher.proxyHost= -# gopher.proxyPort=80 -# -# Socks proxy settings. socksProxyHost is the name of the proxy server -# (e.g. socks.domain.com), socksProxyPort is the port number to use -# (default value is 1080) -# -# socksProxyHost= -# socksProxyPort=1080 -# -# HTTP Keep Alive settings. remainingData is the maximum amount of data -# in kilobytes that will be cleaned off the underlying socket so that it -# can be reused (default value is 512K), queuedConnections is the maximum -# number of Keep Alive connections to be on the queue for clean up (default -# value is 10). -# http.KeepAlive.remainingData=512 -# http.KeepAlive.queuedConnections=10 - -# Authentication Scheme restrictions for HTTP and HTTPS. -# -# In some environments certain authentication schemes may be undesirable -# when proxying HTTP or HTTPS. For example, "Basic" results in effectively the -# cleartext transmission of the user's password over the physical network. -# This section describes the mechanism for disabling authentication schemes -# based on the scheme name. Disabled schemes will be treated as if they are not -# supported by the implementation. -# -# The 'jdk.http.auth.tunneling.disabledSchemes' property lists the authentication -# schemes that will be disabled when tunneling HTTPS over a proxy, HTTP CONNECT. -# The 'jdk.http.auth.proxying.disabledSchemes' property lists the authentication -# schemes that will be disabled when proxying HTTP. -# -# In both cases the property is a comma-separated list of, case-insensitive, -# authentication scheme names, as defined by their relevant RFCs. An -# implementation may, but is not required to, support common schemes whose names -# include: 'Basic', 'Digest', 'NTLM', 'Kerberos', 'Negotiate'. A scheme that -# is not known, or not supported, by the implementation is ignored. -# -# Note: This property is currently used by the JDK Reference implementation. It -# is not guaranteed to be examined and used by other implementations. -# -#jdk.http.auth.proxying.disabledSchemes= -jdk.http.auth.tunneling.disabledSchemes=Basic - -# -# Transparent NTLM HTTP authentication mode on Windows. Transparent authentication -# can be used for the NTLM scheme, where the security credentials based on the -# currently logged in user's name and password can be obtained directly from the -# operating system, without prompting the user. This property has three possible -# values which regulate the behavior as shown below. Other unrecognized values -# are handled the same as 'disabled'. Note, that NTLM is not considered to be a -# strongly secure authentication scheme and care should be taken before enabling -# this mechanism. -# -# Transparent authentication never used. -#jdk.http.ntlm.transparentAuth=disabled -# -# Enabled for all hosts. -#jdk.http.ntlm.transparentAuth=allHosts -# -# Enabled for hosts that are trusted in Windows Internet settings -#jdk.http.ntlm.transparentAuth=trustedHosts -# -jdk.http.ntlm.transparentAuth=disabled diff --git a/install-packages/windows/bin/jre/lib/security/US_export_policy.jar b/install-packages/windows/bin/jre/lib/security/US_export_policy.jar deleted file mode 100755 index 9af18ebb5..000000000 Binary files a/install-packages/windows/bin/jre/lib/security/US_export_policy.jar and /dev/null differ diff --git a/install-packages/windows/bin/jre/lib/security/blacklisted.certs b/install-packages/windows/bin/jre/lib/security/blacklisted.certs deleted file mode 100644 index beded9ed5..000000000 --- a/install-packages/windows/bin/jre/lib/security/blacklisted.certs +++ /dev/null @@ -1,39 +0,0 @@ -Algorithm=SHA-256 -03DB9E5E79FE6117177F81C11595AF598CB176AF766290DBCEB2C318B32E39A2 -08C396C006A21055D00826A5781A5CCFCE2C8D053AB3C197637A4A7A5BB9A650 -14E6D2764A4B06701C6CBC376A253775F79C782FBCB6C0EE6F99DE4BA1024ADD -1C5E6985ACC09221DBD1A4B7BBC6D3A8C3F8540D19F20763A9537FDD42B4FFE7 -1F6BF8A3F2399AF7FD04516C2719C566CBAD51F412738F66D0457E1E6BDE6F2D -2A464E4113141352C7962FBD1706ED4B88533EF24D7BBA6CCC5D797FD202F1C4 -31C8FD37DB9B56E708B03D1F01848B068C6DA66F36FB5D82C008C6040FA3E133 -3946901F46B0071E90D78279E82FABABCA177231A704BE72C5B0E8918566EA66 -3E11CF90719F6FB44D94EAC9A156B89BEBE7B8598F28EC58913F2BFCAF91D0C0 -423279423B9FC8CB06F1BB7C3B247522B948D5F18939F378ECC901126DE40BFB -450F1B421BB05C8609854884559C323319619E8B06B001EA2DCBB74A23AA3BE2 -4CBBF8256BC9888A8007B2F386940A2E394378B0D903CBB3863C5A6394B889CE -4FEE0163686ECBD65DB968E7494F55D84B25486D438E9DE558D629D28CD4D176 -535D04DFCE027C70BD5F8A9E0AD4F218E9AFDCF5BBCF9B6DE0D81E148E2E3172 -568FAF38D9F155F624838E2181B1CEB4D8459305EE652B0F810C97C3611BFE19 -585CFE6B7436CBD4E732763A2137D7F49599BA9B1790E688FCEC799C58EB84A6 -5E83124D68D24E8E177E306DF643D5EA99C5A94D6FC34B072F7544A1CABB7C7B -71CB00749B9130FB2707A2664BFF958D0FCC8E161D9674C7450BA0FC2BEAF9D3 -76A45A496031E4DD2D7ED23E8F6FF97DBDEA980BAAC8B0BA94D7EDB551348645 -8A1BD21661C60015065212CC98B1ABB50DFD14C872A208E66BAE890F25C448AF -9ED8F9B0E8E42A1656B8E1DD18F42BA42DC06FE52686173BA2FC70E756F207DC -9FADCE80D62A959F9930D748488C1E22E821F4E1E4A43584B848C2FC11E04D77 -A686FEE577C88AB664D0787ECDFFF035F4806F3DE418DC9E4D516324FFF02083 -A90132CEA1D4F7185E4F688EFFD16F6AC14DFD78356A807599A5DABBEEF3333E -B8686723E415534BC0DBD16326F9486F85B0B0799BF6639334E61DAAE67F36CD -C0D1F42B9F4BF7ACC045B7BB5D4805E10737F67B6310CE505248D543D0D5FE07 -D0156949F1381943442C6974E9B5B49EF441BB799EF20477B90A89C3F33620CE -D151962D954970501C60079258EBCFA38502E0A9F03CD640322B08C0A3117FE5 -D24566BF315F4E597D6E381C87119FB4198F5E9E2607F5F4AB362EF7E2E7672F -D3A936E1A7775A45217C8296A1F22AC5631DCDEC45594099E78EEEBBEDCBA967 -D6CEAE5D9E047FAF7D797858D229AC991AD44316D1E2A37A21926D763153593A -DF21016B00FC54F9FE3BC8B039911BB216E9162FAD2FD14D990AB96E951B49BE -E0E740E4B0F8B3548181FF75B5372FAF4C70B99EC995D694ED0FB91B03FF8D21 -EC30C9C3065A06BB07DC5B1C6B497F370C1CA65C0F30C08E042BA6BCECC78F2C -F5B6F88F75D391A4B1EB336F9E201239FB6B1377DB8CFA7B84736216E5AFFFD7 -FBB12938ABD86C125796EDF4162D291028890A7D6C0C1CCA75FD4B95EBFA7A1A -FC02FD48DB92D4DCE6F11679D38354CF750CFC7F584A520EB90BDE80E241F2BD -FDEDB5BDFCB67411513A61AEE5CB5B5D7C52AF06028EFC996CC1B05B1D6CEA2B diff --git a/install-packages/windows/bin/jre/lib/security/cacerts b/install-packages/windows/bin/jre/lib/security/cacerts index 4bee5ce50..d5bcc9391 100755 Binary files a/install-packages/windows/bin/jre/lib/security/cacerts and b/install-packages/windows/bin/jre/lib/security/cacerts differ diff --git a/install-packages/windows/bin/jre/lib/security/java.policy b/install-packages/windows/bin/jre/lib/security/java.policy deleted file mode 100644 index 120694d69..000000000 --- a/install-packages/windows/bin/jre/lib/security/java.policy +++ /dev/null @@ -1,49 +0,0 @@ - -// Standard extensions get all permissions by default - -grant codeBase "file:${{java.ext.dirs}}/*" { - permission java.security.AllPermission; -}; - -// default permissions granted to all domains - -grant { - // Allows any thread to stop itself using the java.lang.Thread.stop() - // method that takes no argument. - // Note that this permission is granted by default only to remain - // backwards compatible. - // It is strongly recommended that you either remove this permission - // from this policy file or further restrict it to code sources - // that you specify, because Thread.stop() is potentially unsafe. - // See the API specification of java.lang.Thread.stop() for more - // information. - permission java.lang.RuntimePermission "stopThread"; - - // allows anyone to listen on dynamic ports - permission java.net.SocketPermission "localhost:0", "listen"; - - // "standard" properies that can be read by anyone - - permission java.util.PropertyPermission "java.version", "read"; - permission java.util.PropertyPermission "java.vendor", "read"; - permission java.util.PropertyPermission "java.vendor.url", "read"; - permission java.util.PropertyPermission "java.class.version", "read"; - permission java.util.PropertyPermission "os.name", "read"; - permission java.util.PropertyPermission "os.version", "read"; - permission java.util.PropertyPermission "os.arch", "read"; - permission java.util.PropertyPermission "file.separator", "read"; - permission java.util.PropertyPermission "path.separator", "read"; - permission java.util.PropertyPermission "line.separator", "read"; - - permission java.util.PropertyPermission "java.specification.version", "read"; - permission java.util.PropertyPermission "java.specification.vendor", "read"; - permission java.util.PropertyPermission "java.specification.name", "read"; - - permission java.util.PropertyPermission "java.vm.specification.version", "read"; - permission java.util.PropertyPermission "java.vm.specification.vendor", "read"; - permission java.util.PropertyPermission "java.vm.specification.name", "read"; - permission java.util.PropertyPermission "java.vm.version", "read"; - permission java.util.PropertyPermission "java.vm.vendor", "read"; - permission java.util.PropertyPermission "java.vm.name", "read"; -}; - diff --git a/install-packages/windows/bin/jre/lib/security/java.security b/install-packages/windows/bin/jre/lib/security/java.security deleted file mode 100644 index a0ce655dc..000000000 --- a/install-packages/windows/bin/jre/lib/security/java.security +++ /dev/null @@ -1,981 +0,0 @@ -# -# This is the "master security properties file". -# -# An alternate java.security properties file may be specified -# from the command line via the system property -# -# -Djava.security.properties= -# -# This properties file appends to the master security properties file. -# If both properties files specify values for the same key, the value -# from the command-line properties file is selected, as it is the last -# one loaded. -# -# Also, if you specify -# -# -Djava.security.properties== (2 equals), -# -# then that properties file completely overrides the master security -# properties file. -# -# To disable the ability to specify an additional properties file from -# the command line, set the key security.overridePropertiesFile -# to false in the master security properties file. It is set to true -# by default. - -# In this file, various security properties are set for use by -# java.security classes. This is where users can statically register -# Cryptography Package Providers ("providers" for short). The term -# "provider" refers to a package or set of packages that supply a -# concrete implementation of a subset of the cryptography aspects of -# the Java Security API. A provider may, for example, implement one or -# more digital signature algorithms or message digest algorithms. -# -# Each provider must implement a subclass of the Provider class. -# To register a provider in this master security properties file, -# specify the Provider subclass name and priority in the format -# -# security.provider.= -# -# This declares a provider, and specifies its preference -# order n. The preference order is the order in which providers are -# searched for requested algorithms (when no specific provider is -# requested). The order is 1-based; 1 is the most preferred, followed -# by 2, and so on. -# -# must specify the subclass of the Provider class whose -# constructor sets the values of various properties that are required -# for the Java Security API to look up the algorithms or other -# facilities implemented by the provider. -# -# There must be at least one provider specification in java.security. -# There is a default provider that comes standard with the JDK. It -# is called the "SUN" provider, and its Provider subclass -# named Sun appears in the sun.security.provider package. Thus, the -# "SUN" provider is registered via the following: -# -# security.provider.1=sun.security.provider.Sun -# -# (The number 1 is used for the default provider.) -# -# Note: Providers can be dynamically registered instead by calls to -# either the addProvider or insertProviderAt method in the Security -# class. - -# -# List of providers and their preference orders (see above): -# -security.provider.1=sun.security.provider.Sun -security.provider.2=sun.security.rsa.SunRsaSign -security.provider.3=sun.security.ec.SunEC -security.provider.4=com.sun.net.ssl.internal.ssl.Provider -security.provider.5=com.sun.crypto.provider.SunJCE -security.provider.6=sun.security.jgss.SunProvider -security.provider.7=com.sun.security.sasl.Provider -security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI -security.provider.9=sun.security.smartcardio.SunPCSC -security.provider.10=sun.security.mscapi.SunMSCAPI - -# -# Sun Provider SecureRandom seed source. -# -# Select the primary source of seed data for the "SHA1PRNG" and -# "NativePRNG" SecureRandom implementations in the "Sun" provider. -# (Other SecureRandom implementations might also use this property.) -# -# On Unix-like systems (for example, Solaris/Linux/MacOS), the -# "NativePRNG" and "SHA1PRNG" implementations obtains seed data from -# special device files such as file:/dev/random. -# -# On Windows systems, specifying the URLs "file:/dev/random" or -# "file:/dev/urandom" will enable the native Microsoft CryptoAPI seeding -# mechanism for SHA1PRNG. -# -# By default, an attempt is made to use the entropy gathering device -# specified by the "securerandom.source" Security property. If an -# exception occurs while accessing the specified URL: -# -# SHA1PRNG: -# the traditional system/thread activity algorithm will be used. -# -# NativePRNG: -# a default value of /dev/random will be used. If neither -# are available, the implementation will be disabled. -# "file" is the only currently supported protocol type. -# -# The entropy gathering device can also be specified with the System -# property "java.security.egd". For example: -# -# % java -Djava.security.egd=file:/dev/random MainClass -# -# Specifying this System property will override the -# "securerandom.source" Security property. -# -# In addition, if "file:/dev/random" or "file:/dev/urandom" is -# specified, the "NativePRNG" implementation will be more preferred than -# SHA1PRNG in the Sun provider. -# -securerandom.source=file:/dev/random - -# -# A list of known strong SecureRandom implementations. -# -# To help guide applications in selecting a suitable strong -# java.security.SecureRandom implementation, Java distributions should -# indicate a list of known strong implementations using the property. -# -# This is a comma-separated list of algorithm and/or algorithm:provider -# entries. -# -securerandom.strongAlgorithms=Windows-PRNG:SunMSCAPI,SHA1PRNG:SUN - -# -# Class to instantiate as the javax.security.auth.login.Configuration -# provider. -# -login.configuration.provider=sun.security.provider.ConfigFile - -# -# Default login configuration file -# -#login.config.url.1=file:${user.home}/.java.login.config - -# -# Class to instantiate as the system Policy. This is the name of the class -# that will be used as the Policy object. -# -policy.provider=sun.security.provider.PolicyFile - -# The default is to have a single system-wide policy file, -# and a policy file in the user's home directory. -policy.url.1=file:${java.home}/lib/security/java.policy -policy.url.2=file:${user.home}/.java.policy - -# whether or not we expand properties in the policy file -# if this is set to false, properties (${...}) will not be expanded in policy -# files. -policy.expandProperties=true - -# whether or not we allow an extra policy to be passed on the command line -# with -Djava.security.policy=somefile. Comment out this line to disable -# this feature. -policy.allowSystemProperty=true - -# whether or not we look into the IdentityScope for trusted Identities -# when encountering a 1.1 signed JAR file. If the identity is found -# and is trusted, we grant it AllPermission. -policy.ignoreIdentityScope=false - -# -# Default keystore type. -# -keystore.type=jks - -# -# Controls compatibility mode for the JKS keystore type. -# -# When set to 'true', the JKS keystore type supports loading -# keystore files in either JKS or PKCS12 format. When set to 'false' -# it supports loading only JKS keystore files. -# -keystore.type.compat=true - -# -# List of comma-separated packages that start with or equal this string -# will cause a security exception to be thrown when -# passed to checkPackageAccess unless the -# corresponding RuntimePermission ("accessClassInPackage."+package) has -# been granted. -package.access=sun.,\ - com.sun.xml.internal.,\ - com.sun.imageio.,\ - com.sun.istack.internal.,\ - com.sun.jmx.,\ - com.sun.media.sound.,\ - com.sun.naming.internal.,\ - com.sun.proxy.,\ - com.sun.corba.se.,\ - com.sun.org.apache.bcel.internal.,\ - com.sun.org.apache.regexp.internal.,\ - com.sun.org.apache.xerces.internal.,\ - com.sun.org.apache.xpath.internal.,\ - com.sun.org.apache.xalan.internal.extensions.,\ - com.sun.org.apache.xalan.internal.lib.,\ - com.sun.org.apache.xalan.internal.res.,\ - com.sun.org.apache.xalan.internal.templates.,\ - com.sun.org.apache.xalan.internal.utils.,\ - com.sun.org.apache.xalan.internal.xslt.,\ - com.sun.org.apache.xalan.internal.xsltc.cmdline.,\ - com.sun.org.apache.xalan.internal.xsltc.compiler.,\ - com.sun.org.apache.xalan.internal.xsltc.trax.,\ - com.sun.org.apache.xalan.internal.xsltc.util.,\ - com.sun.org.apache.xml.internal.res.,\ - com.sun.org.apache.xml.internal.resolver.helpers.,\ - com.sun.org.apache.xml.internal.resolver.readers.,\ - com.sun.org.apache.xml.internal.security.,\ - com.sun.org.apache.xml.internal.serializer.utils.,\ - com.sun.org.apache.xml.internal.utils.,\ - com.sun.org.glassfish.,\ - com.oracle.xmlns.internal.,\ - com.oracle.webservices.internal.,\ - oracle.jrockit.jfr.,\ - org.jcp.xml.dsig.internal.,\ - jdk.internal.,\ - jdk.nashorn.internal.,\ - jdk.nashorn.tools.,\ - jdk.xml.internal.,\ - com.sun.activation.registries.,\ - com.sun.java.accessibility. - -# -# List of comma-separated packages that start with or equal this string -# will cause a security exception to be thrown when -# passed to checkPackageDefinition unless the -# corresponding RuntimePermission ("defineClassInPackage."+package) has -# been granted. -# -# by default, none of the class loaders supplied with the JDK call -# checkPackageDefinition. -# -package.definition=sun.,\ - com.sun.xml.internal.,\ - com.sun.imageio.,\ - com.sun.istack.internal.,\ - com.sun.jmx.,\ - com.sun.media.sound.,\ - com.sun.naming.internal.,\ - com.sun.proxy.,\ - com.sun.corba.se.,\ - com.sun.org.apache.bcel.internal.,\ - com.sun.org.apache.regexp.internal.,\ - com.sun.org.apache.xerces.internal.,\ - com.sun.org.apache.xpath.internal.,\ - com.sun.org.apache.xalan.internal.extensions.,\ - com.sun.org.apache.xalan.internal.lib.,\ - com.sun.org.apache.xalan.internal.res.,\ - com.sun.org.apache.xalan.internal.templates.,\ - com.sun.org.apache.xalan.internal.utils.,\ - com.sun.org.apache.xalan.internal.xslt.,\ - com.sun.org.apache.xalan.internal.xsltc.cmdline.,\ - com.sun.org.apache.xalan.internal.xsltc.compiler.,\ - com.sun.org.apache.xalan.internal.xsltc.trax.,\ - com.sun.org.apache.xalan.internal.xsltc.util.,\ - com.sun.org.apache.xml.internal.res.,\ - com.sun.org.apache.xml.internal.resolver.helpers.,\ - com.sun.org.apache.xml.internal.resolver.readers.,\ - com.sun.org.apache.xml.internal.security.,\ - com.sun.org.apache.xml.internal.serializer.utils.,\ - com.sun.org.apache.xml.internal.utils.,\ - com.sun.org.glassfish.,\ - com.oracle.xmlns.internal.,\ - com.oracle.webservices.internal.,\ - oracle.jrockit.jfr.,\ - org.jcp.xml.dsig.internal.,\ - jdk.internal.,\ - jdk.nashorn.internal.,\ - jdk.nashorn.tools.,\ - jdk.xml.internal.,\ - com.sun.activation.registries.,\ - com.sun.java.accessibility. - -# -# Determines whether this properties file can be appended to -# or overridden on the command line via -Djava.security.properties -# -security.overridePropertiesFile=true - -# -# Determines the default key and trust manager factory algorithms for -# the javax.net.ssl package. -# -ssl.KeyManagerFactory.algorithm=SunX509 -ssl.TrustManagerFactory.algorithm=PKIX - -# -# The Java-level namelookup cache policy for successful lookups: -# -# any negative value: caching forever -# any positive value: the number of seconds to cache an address for -# zero: do not cache -# -# default value is forever (FOREVER). For security reasons, this -# caching is made forever when a security manager is set. When a security -# manager is not set, the default behavior in this implementation -# is to cache for 30 seconds. -# -# NOTE: setting this to anything other than the default value can have -# serious security implications. Do not set it unless -# you are sure you are not exposed to DNS spoofing attack. -# -#networkaddress.cache.ttl=-1 - -# The Java-level namelookup cache policy for failed lookups: -# -# any negative value: cache forever -# any positive value: the number of seconds to cache negative lookup results -# zero: do not cache -# -# In some Microsoft Windows networking environments that employ -# the WINS name service in addition to DNS, name service lookups -# that fail may take a noticeably long time to return (approx. 5 seconds). -# For this reason the default caching policy is to maintain these -# results for 10 seconds. -# -# -networkaddress.cache.negative.ttl=10 - -# -# Properties to configure OCSP for certificate revocation checking -# - -# Enable OCSP -# -# By default, OCSP is not used for certificate revocation checking. -# This property enables the use of OCSP when set to the value "true". -# -# NOTE: SocketPermission is required to connect to an OCSP responder. -# -# Example, -# ocsp.enable=true - -# -# Location of the OCSP responder -# -# By default, the location of the OCSP responder is determined implicitly -# from the certificate being validated. This property explicitly specifies -# the location of the OCSP responder. The property is used when the -# Authority Information Access extension (defined in RFC 3280) is absent -# from the certificate or when it requires overriding. -# -# Example, -# ocsp.responderURL=http://ocsp.example.net:80 - -# -# Subject name of the OCSP responder's certificate -# -# By default, the certificate of the OCSP responder is that of the issuer -# of the certificate being validated. This property identifies the certificate -# of the OCSP responder when the default does not apply. Its value is a string -# distinguished name (defined in RFC 2253) which identifies a certificate in -# the set of certificates supplied during cert path validation. In cases where -# the subject name alone is not sufficient to uniquely identify the certificate -# then both the "ocsp.responderCertIssuerName" and -# "ocsp.responderCertSerialNumber" properties must be used instead. When this -# property is set then those two properties are ignored. -# -# Example, -# ocsp.responderCertSubjectName="CN=OCSP Responder, O=XYZ Corp" - -# -# Issuer name of the OCSP responder's certificate -# -# By default, the certificate of the OCSP responder is that of the issuer -# of the certificate being validated. This property identifies the certificate -# of the OCSP responder when the default does not apply. Its value is a string -# distinguished name (defined in RFC 2253) which identifies a certificate in -# the set of certificates supplied during cert path validation. When this -# property is set then the "ocsp.responderCertSerialNumber" property must also -# be set. When the "ocsp.responderCertSubjectName" property is set then this -# property is ignored. -# -# Example, -# ocsp.responderCertIssuerName="CN=Enterprise CA, O=XYZ Corp" - -# -# Serial number of the OCSP responder's certificate -# -# By default, the certificate of the OCSP responder is that of the issuer -# of the certificate being validated. This property identifies the certificate -# of the OCSP responder when the default does not apply. Its value is a string -# of hexadecimal digits (colon or space separators may be present) which -# identifies a certificate in the set of certificates supplied during cert path -# validation. When this property is set then the "ocsp.responderCertIssuerName" -# property must also be set. When the "ocsp.responderCertSubjectName" property -# is set then this property is ignored. -# -# Example, -# ocsp.responderCertSerialNumber=2A:FF:00 - -# -# Policy for failed Kerberos KDC lookups: -# -# When a KDC is unavailable (network error, service failure, etc), it is -# put inside a blacklist and accessed less often for future requests. The -# value (case-insensitive) for this policy can be: -# -# tryLast -# KDCs in the blacklist are always tried after those not on the list. -# -# tryLess[:max_retries,timeout] -# KDCs in the blacklist are still tried by their order in the configuration, -# but with smaller max_retries and timeout values. max_retries and timeout -# are optional numerical parameters (default 1 and 5000, which means once -# and 5 seconds). Please notes that if any of the values defined here is -# more than what is defined in krb5.conf, it will be ignored. -# -# Whenever a KDC is detected as available, it is removed from the blacklist. -# The blacklist is reset when krb5.conf is reloaded. You can add -# refreshKrb5Config=true to a JAAS configuration file so that krb5.conf is -# reloaded whenever a JAAS authentication is attempted. -# -# Example, -# krb5.kdc.bad.policy = tryLast -# krb5.kdc.bad.policy = tryLess:2,2000 -krb5.kdc.bad.policy = tryLast - -# Algorithm restrictions for certification path (CertPath) processing -# -# In some environments, certain algorithms or key lengths may be undesirable -# for certification path building and validation. For example, "MD2" is -# generally no longer considered to be a secure hash algorithm. This section -# describes the mechanism for disabling algorithms based on algorithm name -# and/or key length. This includes algorithms used in certificates, as well -# as revocation information such as CRLs and signed OCSP Responses. -# The syntax of the disabled algorithm string is described as follows: -# DisabledAlgorithms: -# " DisabledAlgorithm { , DisabledAlgorithm } " -# -# DisabledAlgorithm: -# AlgorithmName [Constraint] { '&' Constraint } -# -# AlgorithmName: -# (see below) -# -# Constraint: -# KeySizeConstraint | CAConstraint | DenyAfterConstraint | -# UsageConstraint -# -# KeySizeConstraint: -# keySize Operator KeyLength -# -# Operator: -# <= | < | == | != | >= | > -# -# KeyLength: -# Integer value of the algorithm's key length in bits -# -# CAConstraint: -# jdkCA -# -# DenyAfterConstraint: -# denyAfter YYYY-MM-DD -# -# UsageConstraint: -# usage [TLSServer] [TLSClient] [SignedJAR] -# -# The "AlgorithmName" is the standard algorithm name of the disabled -# algorithm. See "Java Cryptography Architecture Standard Algorithm Name -# Documentation" for information about Standard Algorithm Names. Matching -# is performed using a case-insensitive sub-element matching rule. (For -# example, in "SHA1withECDSA" the sub-elements are "SHA1" for hashing and -# "ECDSA" for signatures.) If the assertion "AlgorithmName" is a -# sub-element of the certificate algorithm name, the algorithm will be -# rejected during certification path building and validation. For example, -# the assertion algorithm name "DSA" will disable all certificate algorithms -# that rely on DSA, such as NONEwithDSA, SHA1withDSA. However, the assertion -# will not disable algorithms related to "ECDSA". -# -# A "Constraint" defines restrictions on the keys and/or certificates for -# a specified AlgorithmName: -# -# KeySizeConstraint: -# keySize Operator KeyLength -# The constraint requires a key of a valid size range if the -# "AlgorithmName" is of a key algorithm. The "KeyLength" indicates -# the key size specified in number of bits. For example, -# "RSA keySize <= 1024" indicates that any RSA key with key size less -# than or equal to 1024 bits should be disabled, and -# "RSA keySize < 1024, RSA keySize > 2048" indicates that any RSA key -# with key size less than 1024 or greater than 2048 should be disabled. -# This constraint is only used on algorithms that have a key size. -# -# CAConstraint: -# jdkCA -# This constraint prohibits the specified algorithm only if the -# algorithm is used in a certificate chain that terminates at a marked -# trust anchor in the lib/security/cacerts keystore. If the jdkCA -# constraint is not set, then all chains using the specified algorithm -# are restricted. jdkCA may only be used once in a DisabledAlgorithm -# expression. -# Example: To apply this constraint to SHA-1 certificates, include -# the following: "SHA1 jdkCA" -# -# DenyAfterConstraint: -# denyAfter YYYY-MM-DD -# This constraint prohibits a certificate with the specified algorithm -# from being used after the date regardless of the certificate's -# validity. JAR files that are signed and timestamped before the -# constraint date with certificates containing the disabled algorithm -# will not be restricted. The date is processed in the UTC timezone. -# This constraint can only be used once in a DisabledAlgorithm -# expression. -# Example: To deny usage of RSA 2048 bit certificates after Feb 3 2020, -# use the following: "RSA keySize == 2048 & denyAfter 2020-02-03" -# -# UsageConstraint: -# usage [TLSServer] [TLSClient] [SignedJAR] -# This constraint prohibits the specified algorithm for -# a specified usage. This should be used when disabling an algorithm -# for all usages is not practical. 'TLSServer' restricts the algorithm -# in TLS server certificate chains when server authentication is -# performed. 'TLSClient' restricts the algorithm in TLS client -# certificate chains when client authentication is performed. -# 'SignedJAR' constrains use of certificates in signed jar files. -# The usage type follows the keyword and more than one usage type can -# be specified with a whitespace delimiter. -# Example: "SHA1 usage TLSServer TLSClient" -# -# When an algorithm must satisfy more than one constraint, it must be -# delimited by an ampersand '&'. For example, to restrict certificates in a -# chain that terminate at a distribution provided trust anchor and contain -# RSA keys that are less than or equal to 1024 bits, add the following -# constraint: "RSA keySize <= 1024 & jdkCA". -# -# All DisabledAlgorithms expressions are processed in the order defined in the -# property. This requires lower keysize constraints to be specified -# before larger keysize constraints of the same algorithm. For example: -# "RSA keySize < 1024 & jdkCA, RSA keySize < 2048". -# -# Note: The algorithm restrictions do not apply to trust anchors or -# self-signed certificates. -# -# Note: This property is currently used by Oracle's PKIX implementation. It -# is not guaranteed to be examined and used by other implementations. -# -# Example: -# jdk.certpath.disabledAlgorithms=MD2, DSA, RSA keySize < 2048 -# -# -jdk.certpath.disabledAlgorithms=MD2, MD5, SHA1 jdkCA & usage TLSServer, \ - RSA keySize < 1024, DSA keySize < 1024, EC keySize < 224 - -# -# Algorithm restrictions for signed JAR files -# -# In some environments, certain algorithms or key lengths may be undesirable -# for signed JAR validation. For example, "MD2" is generally no longer -# considered to be a secure hash algorithm. This section describes the -# mechanism for disabling algorithms based on algorithm name and/or key length. -# JARs signed with any of the disabled algorithms or key sizes will be treated -# as unsigned. -# -# The syntax of the disabled algorithm string is described as follows: -# DisabledAlgorithms: -# " DisabledAlgorithm { , DisabledAlgorithm } " -# -# DisabledAlgorithm: -# AlgorithmName [Constraint] { '&' Constraint } -# -# AlgorithmName: -# (see below) -# -# Constraint: -# KeySizeConstraint | DenyAfterConstraint -# -# KeySizeConstraint: -# keySize Operator KeyLength -# -# DenyAfterConstraint: -# denyAfter YYYY-MM-DD -# -# Operator: -# <= | < | == | != | >= | > -# -# KeyLength: -# Integer value of the algorithm's key length in bits -# -# Note: This property is currently used by the JDK Reference -# implementation. It is not guaranteed to be examined and used by other -# implementations. -# -# See "jdk.certpath.disabledAlgorithms" for syntax descriptions. -# -jdk.jar.disabledAlgorithms=MD2, MD5, RSA keySize < 1024, DSA keySize < 1024 - -# -# Algorithm restrictions for Secure Socket Layer/Transport Layer Security -# (SSL/TLS) processing -# -# In some environments, certain algorithms or key lengths may be undesirable -# when using SSL/TLS. This section describes the mechanism for disabling -# algorithms during SSL/TLS security parameters negotiation, including -# protocol version negotiation, cipher suites selection, peer authentication -# and key exchange mechanisms. -# -# Disabled algorithms will not be negotiated for SSL/TLS connections, even -# if they are enabled explicitly in an application. -# -# For PKI-based peer authentication and key exchange mechanisms, this list -# of disabled algorithms will also be checked during certification path -# building and validation, including algorithms used in certificates, as -# well as revocation information such as CRLs and signed OCSP Responses. -# This is in addition to the jdk.certpath.disabledAlgorithms property above. -# -# See the specification of "jdk.certpath.disabledAlgorithms" for the -# syntax of the disabled algorithm string. -# -# Note: The algorithm restrictions do not apply to trust anchors or -# self-signed certificates. -# -# Note: This property is currently used by the JDK Reference implementation. -# It is not guaranteed to be examined and used by other implementations. -# -# Example: -# jdk.tls.disabledAlgorithms=MD5, SSLv3, DSA, RSA keySize < 2048 -jdk.tls.disabledAlgorithms=SSLv3, RC4, DES, MD5withRSA, DH keySize < 1024, \ - EC keySize < 224, 3DES_EDE_CBC, anon, NULL - -# Legacy algorithms for Secure Socket Layer/Transport Layer Security (SSL/TLS) -# processing in JSSE implementation. -# -# In some environments, a certain algorithm may be undesirable but it -# cannot be disabled because of its use in legacy applications. Legacy -# algorithms may still be supported, but applications should not use them -# as the security strength of legacy algorithms are usually not strong enough -# in practice. -# -# During SSL/TLS security parameters negotiation, legacy algorithms will -# not be negotiated unless there are no other candidates. -# -# The syntax of the legacy algorithms string is described as this Java -# BNF-style: -# LegacyAlgorithms: -# " LegacyAlgorithm { , LegacyAlgorithm } " -# -# LegacyAlgorithm: -# AlgorithmName (standard JSSE algorithm name) -# -# See the specification of security property "jdk.certpath.disabledAlgorithms" -# for the syntax and description of the "AlgorithmName" notation. -# -# Per SSL/TLS specifications, cipher suites have the form: -# SSL_KeyExchangeAlg_WITH_CipherAlg_MacAlg -# or -# TLS_KeyExchangeAlg_WITH_CipherAlg_MacAlg -# -# For example, the cipher suite TLS_RSA_WITH_AES_128_CBC_SHA uses RSA as the -# key exchange algorithm, AES_128_CBC (128 bits AES cipher algorithm in CBC -# mode) as the cipher (encryption) algorithm, and SHA-1 as the message digest -# algorithm for HMAC. -# -# The LegacyAlgorithm can be one of the following standard algorithm names: -# 1. JSSE cipher suite name, e.g., TLS_RSA_WITH_AES_128_CBC_SHA -# 2. JSSE key exchange algorithm name, e.g., RSA -# 3. JSSE cipher (encryption) algorithm name, e.g., AES_128_CBC -# 4. JSSE message digest algorithm name, e.g., SHA -# -# See SSL/TLS specifications and "Java Cryptography Architecture Standard -# Algorithm Name Documentation" for information about the algorithm names. -# -# Note: This property is currently used by the JDK Reference implementation. -# It is not guaranteed to be examined and used by other implementations. -# There is no guarantee the property will continue to exist or be of the -# same syntax in future releases. -# -# Example: -# jdk.tls.legacyAlgorithms=DH_anon, DES_CBC, SSL_RSA_WITH_RC4_128_MD5 -# -jdk.tls.legacyAlgorithms= \ - K_NULL, C_NULL, M_NULL, \ - DH_anon, ECDH_anon, \ - RC4_128, RC4_40, DES_CBC, DES40_CBC, \ - 3DES_EDE_CBC - -# The pre-defined default finite field Diffie-Hellman ephemeral (DHE) -# parameters for Transport Layer Security (SSL/TLS/DTLS) processing. -# -# In traditional SSL/TLS/DTLS connections where finite field DHE parameters -# negotiation mechanism is not used, the server offers the client group -# parameters, base generator g and prime modulus p, for DHE key exchange. -# It is recommended to use dynamic group parameters. This property defines -# a mechanism that allows you to specify custom group parameters. -# -# The syntax of this property string is described as this Java BNF-style: -# DefaultDHEParameters: -# DefinedDHEParameters { , DefinedDHEParameters } -# -# DefinedDHEParameters: -# "{" DHEPrimeModulus , DHEBaseGenerator "}" -# -# DHEPrimeModulus: -# HexadecimalDigits -# -# DHEBaseGenerator: -# HexadecimalDigits -# -# HexadecimalDigits: -# HexadecimalDigit { HexadecimalDigit } -# -# HexadecimalDigit: one of -# 0 1 2 3 4 5 6 7 8 9 A B C D E F a b c d e f -# -# Whitespace characters are ignored. -# -# The "DefinedDHEParameters" defines the custom group parameters, prime -# modulus p and base generator g, for a particular size of prime modulus p. -# The "DHEPrimeModulus" defines the hexadecimal prime modulus p, and the -# "DHEBaseGenerator" defines the hexadecimal base generator g of a group -# parameter. It is recommended to use safe primes for the custom group -# parameters. -# -# If this property is not defined or the value is empty, the underlying JSSE -# provider's default group parameter is used for each connection. -# -# If the property value does not follow the grammar, or a particular group -# parameter is not valid, the connection will fall back and use the -# underlying JSSE provider's default group parameter. -# -# Note: This property is currently used by OpenJDK's JSSE implementation. It -# is not guaranteed to be examined and used by other implementations. -# -# Example: -# jdk.tls.server.defaultDHEParameters= -# { \ -# FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1 \ -# 29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD \ -# EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245 \ -# E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED \ -# EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE65381 \ -# FFFFFFFF FFFFFFFF, 2} - -# Cryptographic Jurisdiction Policy defaults -# -# Import and export control rules on cryptographic software vary from -# country to country. By default, the JDK provides two different sets of -# cryptographic policy files: -# -# unlimited: These policy files contain no restrictions on cryptographic -# strengths or algorithms. -# -# limited: These policy files contain more restricted cryptographic -# strengths, and are still available if your country or -# usage requires the traditional restrictive policy. -# -# The JDK JCE framework uses the unlimited policy files by default. -# However the user may explicitly choose a set either by defining the -# "crypto.policy" Security property or by installing valid JCE policy -# jar files into the traditional JDK installation location. To better -# support older JDK Update releases, the "crypto.policy" property is not -# defined by default. See below for more information. -# -# The following logic determines which policy files are used: -# -# refers to the directory where the JRE was -# installed and may be determined using the "java.home" -# System property. -# -# 1. If the Security property "crypto.policy" has been defined, -# then the following mechanism is used: -# -# The policy files are stored as jar files in subdirectories of -# /lib/security/policy. Each directory contains a complete -# set of policy files. -# -# The "crypto.policy" Security property controls the directory -# selection, and thus the effective cryptographic policy. -# -# The default set of directories is: -# -# limited | unlimited -# -# 2. If the "crypto.policy" property is not set and the traditional -# US_export_policy.jar and local_policy.jar files -# (e.g. limited/unlimited) are found in the legacy -# /lib/security directory, then the rules embedded within -# those jar files will be used. This helps preserve compatibility -# for users upgrading from an older installation. -# -# 3. If the jar files are not present in the legacy location -# and the "crypto.policy" Security property is not defined, -# then the JDK will use the unlimited settings (equivalent to -# crypto.policy=unlimited) -# -# Please see the JCA documentation for additional information on these -# files and formats. -# -# YOU ARE ADVISED TO CONSULT YOUR EXPORT/IMPORT CONTROL COUNSEL OR ATTORNEY -# TO DETERMINE THE EXACT REQUIREMENTS. -# -# Please note that the JCE for Java SE, including the JCE framework, -# cryptographic policy files, and standard JCE providers provided with -# the Java SE, have been reviewed and approved for export as mass market -# encryption item by the US Bureau of Industry and Security. -# -# Note: This property is currently used by the JDK Reference implementation. -# It is not guaranteed to be examined and used by other implementations. -# -#crypto.policy=unlimited - -# -# The policy for the XML Signature secure validation mode. The mode is -# enabled by setting the property "org.jcp.xml.dsig.secureValidation" to -# true with the javax.xml.crypto.XMLCryptoContext.setProperty() method, -# or by running the code with a SecurityManager. -# -# Policy: -# Constraint {"," Constraint } -# Constraint: -# AlgConstraint | MaxTransformsConstraint | MaxReferencesConstraint | -# ReferenceUriSchemeConstraint | KeySizeConstraint | OtherConstraint -# AlgConstraint -# "disallowAlg" Uri -# MaxTransformsConstraint: -# "maxTransforms" Integer -# MaxReferencesConstraint: -# "maxReferences" Integer -# ReferenceUriSchemeConstraint: -# "disallowReferenceUriSchemes" String { String } -# KeySizeConstraint: -# "minKeySize" KeyAlg Integer -# OtherConstraint: -# "noDuplicateIds" | "noRetrievalMethodLoops" -# -# For AlgConstraint, Uri is the algorithm URI String that is not allowed. -# See the XML Signature Recommendation for more information on algorithm -# URI Identifiers. For KeySizeConstraint, KeyAlg is the standard algorithm -# name of the key type (ex: "RSA"). If the MaxTransformsConstraint, -# MaxReferencesConstraint or KeySizeConstraint (for the same key type) is -# specified more than once, only the last entry is enforced. -# -# Note: This property is currently used by the JDK Reference implementation. It -# is not guaranteed to be examined and used by other implementations. -# -jdk.xml.dsig.secureValidationPolicy=\ - disallowAlg http://www.w3.org/TR/1999/REC-xslt-19991116,\ - disallowAlg http://www.w3.org/2001/04/xmldsig-more#rsa-md5,\ - disallowAlg http://www.w3.org/2001/04/xmldsig-more#hmac-md5,\ - disallowAlg http://www.w3.org/2001/04/xmldsig-more#md5,\ - maxTransforms 5,\ - maxReferences 30,\ - disallowReferenceUriSchemes file http https,\ - minKeySize RSA 1024,\ - minKeySize DSA 1024,\ - minKeySize EC 224,\ - noDuplicateIds,\ - noRetrievalMethodLoops - -# -# Serialization process-wide filter -# -# A filter, if configured, is used by java.io.ObjectInputStream during -# deserialization to check the contents of the stream. -# A filter is configured as a sequence of patterns, each pattern is either -# matched against the name of a class in the stream or defines a limit. -# Patterns are separated by ";" (semicolon). -# Whitespace is significant and is considered part of the pattern. -# -# If the system property jdk.serialFilter is also specified, it supersedes -# the security property value defined here. -# -# If a pattern includes a "=", it sets a limit. -# If a limit appears more than once the last value is used. -# Limits are checked before classes regardless of the order in the sequence of patterns. -# If any of the limits are exceeded, the filter status is REJECTED. -# -# maxdepth=value - the maximum depth of a graph -# maxrefs=value - the maximum number of internal references -# maxbytes=value - the maximum number of bytes in the input stream -# maxarray=value - the maximum array length allowed -# -# Other patterns, from left to right, match the class or package name as -# returned from Class.getName. -# If the class is an array type, the class or package to be matched is the element type. -# Arrays of any number of dimensions are treated the same as the element type. -# For example, a pattern of "!example.Foo", rejects creation of any instance or -# array of example.Foo. -# -# If the pattern starts with "!", the status is REJECTED if the remaining pattern -# is matched; otherwise the status is ALLOWED if the pattern matches. -# If the pattern ends with ".**" it matches any class in the package and all subpackages. -# If the pattern ends with ".*" it matches any class in the package. -# If the pattern ends with "*", it matches any class with the pattern as a prefix. -# If the pattern is equal to the class name, it matches. -# Otherwise, the status is UNDECIDED. -# -#jdk.serialFilter=pattern;pattern - -# -# RMI Registry Serial Filter -# -# The filter pattern uses the same format as jdk.serialFilter. -# This filter can override the builtin filter if additional types need to be -# allowed or rejected from the RMI Registry or to decrease limits but not -# to increase limits. -# If the limits (maxdepth, maxrefs, or maxbytes) are exceeded, the object is rejected. -# -# Each non-array type is allowed or rejected if it matches one of the patterns, -# evaluated from left to right, and is otherwise allowed. Arrays of any -# component type, including subarrays and arrays of primitives, are allowed. -# -# Array construction of any component type, including subarrays and arrays of -# primitives, are allowed unless the length is greater than the maxarray limit. -# The filter is applied to each array element. -# -# The built-in filter allows subclasses of allowed classes and -# can approximately be represented as the pattern: -# -#sun.rmi.registry.registryFilter=\ -# maxarray=1000000;\ -# maxdepth=20;\ -# java.lang.String;\ -# java.lang.Number;\ -# java.lang.reflect.Proxy;\ -# java.rmi.Remote;\ -# sun.rmi.server.UnicastRef;\ -# sun.rmi.server.RMIClientSocketFactory;\ -# sun.rmi.server.RMIServerSocketFactory;\ -# java.rmi.activation.ActivationID;\ -# java.rmi.server.UID -# -# RMI Distributed Garbage Collector (DGC) Serial Filter -# -# The filter pattern uses the same format as jdk.serialFilter. -# This filter can override the builtin filter if additional types need to be -# allowed or rejected from the RMI DGC. -# -# The builtin DGC filter can approximately be represented as the filter pattern: -# -#sun.rmi.transport.dgcFilter=\ -# java.rmi.server.ObjID;\ -# java.rmi.server.UID;\ -# java.rmi.dgc.VMID;\ -# java.rmi.dgc.Lease;\ -# maxdepth=5;maxarray=10000 - -# CORBA ORBIorTypeCheckRegistryFilter -# Type check enhancement for ORB::string_to_object processing -# -# An IOR type check filter, if configured, is used by an ORB during -# an ORB::string_to_object invocation to check the veracity of the type encoded -# in the ior string. -# -# The filter pattern consists of a semi-colon separated list of class names. -# The configured list contains the binary class names of the IDL interface types -# corresponding to the IDL stub class to be instantiated. -# As such, a filter specifies a list of IDL stub classes that will be -# allowed by an ORB when an ORB::string_to_object is invoked. -# It is used to specify a white list configuration of acceptable -# IDL stub types which may be contained in a stringified IOR -# parameter passed as input to an ORB::string_to_object method. -# -# Note: This property is currently used by the JDK Reference implementation. -# It is not guaranteed to be examined and used by other implementations. -# -#com.sun.CORBA.ORBIorTypeCheckRegistryFilter=binary_class_name;binary_class_name - -# -# JCEKS Encrypted Key Serial Filter -# -# This filter, if configured, is used by the JCEKS KeyStore during the -# deserialization of the encrypted Key object stored inside a key entry. -# If not configured or the filter result is UNDECIDED (i.e. none of the patterns -# matches), the filter configured by jdk.serialFilter will be consulted. -# -# If the system property jceks.key.serialFilter is also specified, it supersedes -# the security property value defined here. -# -# The filter pattern uses the same format as jdk.serialFilter. The default -# pattern allows java.lang.Enum, java.security.KeyRep, java.security.KeyRep$Type, -# and javax.crypto.spec.SecretKeySpec and rejects all the others. -jceks.key.serialFilter = java.lang.Enum;java.security.KeyRep;\ - java.security.KeyRep$Type;javax.crypto.spec.SecretKeySpec;!* diff --git a/install-packages/windows/bin/jre/lib/security/local_policy.jar b/install-packages/windows/bin/jre/lib/security/local_policy.jar deleted file mode 100755 index 8ada46c98..000000000 Binary files a/install-packages/windows/bin/jre/lib/security/local_policy.jar and /dev/null differ diff --git a/install-packages/windows/bin/jre/lib/sound.properties b/install-packages/windows/bin/jre/lib/sound.properties deleted file mode 100644 index 68309d111..000000000 --- a/install-packages/windows/bin/jre/lib/sound.properties +++ /dev/null @@ -1,39 +0,0 @@ -############################################################ -# Sound Configuration File -############################################################ -# -# This properties file is used to specify default service -# providers for javax.sound.midi.MidiSystem and -# javax.sound.sampled.AudioSystem. -# -# The following keys are recognized by MidiSystem methods: -# -# javax.sound.midi.Receiver -# javax.sound.midi.Sequencer -# javax.sound.midi.Synthesizer -# javax.sound.midi.Transmitter -# -# The following keys are recognized by AudioSystem methods: -# -# javax.sound.sampled.Clip -# javax.sound.sampled.Port -# javax.sound.sampled.SourceDataLine -# javax.sound.sampled.TargetDataLine -# -# The values specify the full class name of the service -# provider, or the device name. -# -# See the class descriptions for details. -# -# Example 1: -# Use MyDeviceProvider as default for SourceDataLines: -# javax.sound.sampled.SourceDataLine=com.xyz.MyDeviceProvider -# -# Example 2: -# Specify the default Synthesizer by its name "InternalSynth". -# javax.sound.midi.Synthesizer=#InternalSynth -# -# Example 3: -# Specify the default Receiver by provider and name: -# javax.sound.midi.Receiver=com.sun.media.sound.MidiProvider#SunMIDI1 -# diff --git a/install-packages/windows/bin/jre/lib/tzmappings b/install-packages/windows/bin/jre/lib/tzmappings index 28917ae0c..a40a1bf6c 100644 --- a/install-packages/windows/bin/jre/lib/tzmappings +++ b/install-packages/windows/bin/jre/lib/tzmappings @@ -1,226 +1,505 @@ -# -# This file describes mapping information between Windows and Java -# time zones. -# Format: Each line should include a colon separated fields of Windows -# time zone registry key, time zone mapID, locale (which is most -# likely used in the time zone), and Java time zone ID. Blank lines -# and lines that start with '#' are ignored. Data lines must be sorted -# by mapID (ASCII order). -# -# NOTE -# This table format is not a public interface of any Java -# platforms. No applications should depend on this file in any form. -# -# This table has been generated by a program and should not be edited -# manually. -# -Romance:-1,64::Europe/Paris: -Romance Standard Time:-1,64::Europe/Paris: -Warsaw:-1,65::Europe/Warsaw: -Central Europe:-1,66::Europe/Prague: -Central Europe Standard Time:-1,66::Europe/Prague: -Prague Bratislava:-1,66::Europe/Prague: -W. Central Africa Standard Time:-1,66:AO:Africa/Luanda: -FLE:-1,67:FI:Europe/Helsinki: -FLE Standard Time:-1,67:FI:Europe/Helsinki: -GFT:-1,67::Europe/Athens: -GFT Standard Time:-1,67::Europe/Athens: -GTB:-1,67::Europe/Athens: -GTB Standard Time:-1,67::Europe/Athens: -Israel:-1,70::Asia/Jerusalem: -Israel Standard Time:-1,70::Asia/Jerusalem: -Arab:-1,71::Asia/Riyadh: -Arab Standard Time:-1,71::Asia/Riyadh: -Arabic Standard Time:-1,71:IQ:Asia/Baghdad: -E. Africa:-1,71:KE:Africa/Nairobi: -E. Africa Standard Time:-1,71:KE:Africa/Nairobi: -Saudi Arabia:-1,71::Asia/Riyadh: -Saudi Arabia Standard Time:-1,71::Asia/Riyadh: -Iran:-1,72::Asia/Tehran: -Iran Standard Time:-1,72::Asia/Tehran: -Afghanistan:-1,73::Asia/Kabul: -Afghanistan Standard Time:-1,73::Asia/Kabul: -India:-1,74::Asia/Calcutta: -India Standard Time:-1,74::Asia/Calcutta: -Myanmar Standard Time:-1,74::Asia/Rangoon: -Nepal Standard Time:-1,74::Asia/Katmandu: -Sri Lanka:-1,74:LK:Asia/Colombo: -Sri Lanka Standard Time:-1,74:LK:Asia/Colombo: -Beijing:-1,75::Asia/Shanghai: -China:-1,75::Asia/Shanghai: -China Standard Time:-1,75::Asia/Shanghai: -AUS Central:-1,76::Australia/Darwin: -AUS Central Standard Time:-1,76::Australia/Darwin: -Cen. Australia:-1,76::Australia/Adelaide: -Cen. Australia Standard Time:-1,76::Australia/Adelaide: -Vladivostok:-1,77::Asia/Vladivostok: -Vladivostok Standard Time:-1,77::Asia/Vladivostok: -West Pacific:-1,77:GU:Pacific/Guam: -West Pacific Standard Time:-1,77:GU:Pacific/Guam: -E. South America:-1,80::America/Sao_Paulo: -E. South America Standard Time:-1,80::America/Sao_Paulo: -Greenland Standard Time:-1,80:GL:America/Godthab: -Newfoundland:-1,81::America/St_Johns: -Newfoundland Standard Time:-1,81::America/St_Johns: -Pacific SA:-1,82::America/Santiago: -Pacific SA Standard Time:-1,82::America/Santiago: -SA Western:-1,82:BO:America/La_Paz: -SA Western Standard Time:-1,82:BO:America/La_Paz: -SA Pacific:-1,83::America/Bogota: -SA Pacific Standard Time:-1,83::America/Bogota: -US Eastern:-1,84::America/Indianapolis: -US Eastern Standard Time:-1,84::America/Indianapolis: -Central America Standard Time:-1,85::America/Regina: -Mexico:-1,85::America/Mexico_City: -Mexico Standard Time:-1,85::America/Mexico_City: -Canada Central:-1,86::America/Regina: -Canada Central Standard Time:-1,86::America/Regina: -US Mountain:-1,87::America/Phoenix: -US Mountain Standard Time:-1,87::America/Phoenix: -GMT:0,1::Europe/London: -GMT Standard Time:0,1::Europe/London: -Ekaterinburg:10,11::Asia/Yekaterinburg: -Ekaterinburg Standard Time:10,11::Asia/Yekaterinburg: -West Asia:10,11:UZ:Asia/Tashkent: -West Asia Standard Time:10,11:UZ:Asia/Tashkent: -Central Asia:12,13::Asia/Almaty: -Central Asia Standard Time:12,13::Asia/Almaty: -N. Central Asia Standard Time:12,13::Asia/Novosibirsk: -Bangkok:14,15::Asia/Bangkok: -Bangkok Standard Time:14,15::Asia/Bangkok: -North Asia Standard Time:14,15::Asia/Krasnoyarsk: -SE Asia:14,15::Asia/Bangkok: -SE Asia Standard Time:14,15::Asia/Bangkok: -North Asia East Standard Time:16,17:RU:Asia/Irkutsk: -Singapore:16,17:SG:Asia/Singapore: -Singapore Standard Time:16,17:SG:Asia/Singapore: -Taipei:16,17::Asia/Taipei: -Taipei Standard Time:16,17::Asia/Taipei: -W. Australia:16,17:AU:Australia/Perth: -W. Australia Standard Time:16,17:AU:Australia/Perth: -Korea:18,19:KR:Asia/Seoul: -Korea Standard Time:18,19:KR:Asia/Seoul: -Tokyo:18,19::Asia/Tokyo: -Tokyo Standard Time:18,19::Asia/Tokyo: -Yakutsk:18,19:RU:Asia/Yakutsk: -Yakutsk Standard Time:18,19:RU:Asia/Yakutsk: -Central European:2,3:CS:Europe/Belgrade: -Central European Standard Time:2,3:CS:Europe/Belgrade: -W. Europe:2,3::Europe/Berlin: -W. Europe Standard Time:2,3::Europe/Berlin: -Tasmania:20,-1::Australia/Hobart: -Tasmania Standard Time:20,-1::Australia/Hobart: -AUS Eastern:20,21::Australia/Sydney: -AUS Eastern Standard Time:20,21::Australia/Sydney: -E. Australia:20,21::Australia/Brisbane: -E. Australia Standard Time:20,21::Australia/Brisbane: -Sydney Standard Time:20,21::Australia/Sydney: -Tasmania Standard Time:20,65::Australia/Hobart: -Central Pacific:22,23::Pacific/Guadalcanal: -Central Pacific Standard Time:22,23::Pacific/Guadalcanal: -Dateline:24,25::GMT-1200: -Dateline Standard Time:24,25::GMT-1200: -Fiji:24,25::Pacific/Fiji: -Fiji Standard Time:24,25::Pacific/Fiji: -Samoa:26,27::Pacific/Apia: -Samoa Standard Time:26,27::Pacific/Apia: -Hawaiian:28,29::Pacific/Honolulu: -Hawaiian Standard Time:28,29::Pacific/Honolulu: -Alaskan:30,31::America/Anchorage: -Alaskan Standard Time:30,31::America/Anchorage: -Pacific:32,33::America/Los_Angeles: -Pacific Standard Time:32,33::America/Los_Angeles: -Mexico Standard Time 2:34,35:MX:America/Chihuahua: -Mountain:34,35::America/Denver: -Mountain Standard Time:34,35::America/Denver: -Central:36,37::America/Chicago: -Central Standard Time:36,37::America/Chicago: -Eastern:38,39::America/New_York: -Eastern Standard Time:38,39::America/New_York: -E. Europe:4,5::EET: -E. Europe Standard Time:4,5::EET: -Egypt:4,68::Africa/Cairo: -Egypt Standard Time:4,68::Africa/Cairo: -South Africa:4,69::Africa/Harare: -South Africa Standard Time:4,69::Africa/Harare: -Atlantic:40,41::America/Halifax: -Atlantic Standard Time:40,41::America/Halifax: -SA Eastern:42,43:GF:America/Cayenne: -SA Eastern Standard Time:42,43:GF:America/Cayenne: -Mid-Atlantic:44,45::Atlantic/South_Georgia: -Mid-Atlantic Standard Time:44,45::Atlantic/South_Georgia: -Azores:46,47::Atlantic/Azores: -Azores Standard Time:46,47::Atlantic/Azores: -Cape Verde Standard Time:46,47::Atlantic/Cape_Verde: -Russian:6,7::Europe/Moscow: -Russian Standard Time:6,7::Europe/Moscow: -New Zealand:78,79::Pacific/Auckland: -New Zealand Standard Time:78,79::Pacific/Auckland: -Tonga Standard Time:78,79::Pacific/Tongatapu: -Arabian:8,9::Asia/Muscat: -Arabian Standard Time:8,9::Asia/Muscat: -Caucasus:8,9:AM:Asia/Yerevan: -Caucasus Standard Time:8,9:AM:Asia/Yerevan: -GMT Standard Time:88,89::GMT: -Greenwich:88,89::GMT: -Greenwich Standard Time:88,89::GMT: -Aleutian Standard Time:900,900:US:America/Adak: -Altai Standard Time:901,901::Asia/Barnaul: -Argentina Standard Time:902,902::America/Buenos_Aires: -Armenian Standard Time:903,903:AM:Asia/Yerevan: -Astrakhan Standard Time:904,904::Europe/Astrakhan: -Aus Central W. Standard Time:905,905::Australia/Eucla: -Azerbaijan Standard Time:906,906:AZ:Asia/Baku: -Bahia Standard Time:907,907::America/Bahia: -Bangladesh Standard Time:908,908::Asia/Dhaka: -Belarus Standard Time:909,909:BY:Europe/Minsk: -Bougainville Standard Time:910,910::Pacific/Bougainville: -Central Brazilian Standard Time:911,911:BR:America/Cuiaba: -Central Standard Time (Mexico):912,912::America/Mexico_City: -Chatham Islands Standard Time:913,913::Pacific/Chatham: -Cuba Standard Time:914,914:CU:America/Havana: -Easter Island Standard Time:915,915:CL:Pacific/Easter: -Eastern Standard Time (Mexico):916,916::America/Cancun: -Georgian Standard Time:917,917:GE:Asia/Tbilisi: -Haiti Standard Time:918,918:HT:America/Port-au-Prince: -Jordan Standard Time:919,919:JO:Asia/Amman: -Kaliningrad Standard Time:920,920:RU:Europe/Kaliningrad: -Kamchatka Standard Time:921,921:RU:Asia/Kamchatka: -Libya Standard Time:922,922:LY:Africa/Tripoli: -Line Islands Standard Time:923,923::Pacific/Kiritimati: -Lord Howe Standard Time:924,924::Australia/Lord_Howe: -Magadan Standard Time:925,925::Asia/Magadan: -Marquesas Standard Time:926,926::Pacific/Marquesas: -Mauritius Standard Time:927,927:MU:Indian/Mauritius: -Middle East Standard Time:928,928:LB:Asia/Beirut: -Montevideo Standard Time:929,929:UY:America/Montevideo: -Morocco Standard Time:930,930:MA:Africa/Casablanca: -Mountain Standard Time (Mexico):931,931:MX:America/Chihuahua: -Namibia Standard Time:932,932:NA:Africa/Windhoek: -Norfolk Standard Time:933,933::Pacific/Norfolk: -North Korea Standard Time:934,934:KP:Asia/Pyongyang: -Pacific Standard Time (Mexico):935,935:MX:America/Tijuana: -Pakistan Standard Time:936,936::Asia/Karachi: -Paraguay Standard Time:937,937:PY:America/Asuncion: -Russia Time Zone 10:938,938::Asia/Srednekolymsk: -Russia Time Zone 11:939,939::Asia/Anadyr: -Russia Time Zone 3:940,940::Europe/Samara: -Saint Pierre Standard Time:941,941:PM:America/Miquelon: -Sakhalin Standard Time:942,942::Asia/Sakhalin: -Syria Standard Time:943,943:SY:Asia/Damascus: -Tocantins Standard Time:944,944::America/Araguaina: -Tomsk Standard Time:945,945::Asia/Tomsk: -Transbaikal Standard Time:946,946::Asia/Chita: -Turkey Standard Time:947,947::Asia/Istanbul: -Turks And Caicos Standard Time:948,948:TC:America/Grand_Turk: -UTC+12:949,949::GMT+1200: -UTC-02:950,950::GMT-0200: -UTC-08:951,951::GMT-0800: -UTC-09:952,952::GMT-0900: -UTC-11:953,953::GMT-1100: -UTC:954,954::UTC: -Ulaanbaatar Standard Time:955,955::Asia/Ulaanbaatar: -Venezuela Standard Time:956,956::America/Caracas: -W. Mongolia Standard Time:957,957::Asia/Hovd: -West Bank Standard Time:958,958::Asia/Gaza: -Western Brazilian Standard Time:959,959:BR:America/Rio_Branco: +AUS Central Standard Time:AU:Australia/Darwin: +AUS Central Standard Time:001:Australia/Darwin: +AUS Eastern Standard Time:AU:Australia/Sydney: +AUS Eastern Standard Time:001:Australia/Sydney: +Afghanistan Standard Time:AF:Asia/Kabul: +Afghanistan Standard Time:001:Asia/Kabul: +Alaskan Standard Time:US:America/Anchorage: +Alaskan Standard Time:001:America/Anchorage: +Aleutian Standard Time:US:America/Adak: +Aleutian Standard Time:001:America/Adak: +Altai Standard Time:RU:Asia/Barnaul: +Altai Standard Time:001:Asia/Barnaul: +Arab Standard Time:BH:Asia/Bahrain: +Arab Standard Time:KW:Asia/Kuwait: +Arab Standard Time:QA:Asia/Qatar: +Arab Standard Time:SA:Asia/Riyadh: +Arab Standard Time:YE:Asia/Aden: +Arab Standard Time:001:Asia/Riyadh: +Arabian Standard Time:AE:Asia/Dubai: +Arabian Standard Time:OM:Asia/Muscat: +Arabian Standard Time:ZZ:Etc/GMT-4: +Arabian Standard Time:001:Asia/Dubai: +Arabic Standard Time:IQ:Asia/Baghdad: +Arabic Standard Time:001:Asia/Baghdad: +Argentina Standard Time:AR:America/Buenos_Aires: +Argentina Standard Time:001:America/Buenos_Aires: +Astrakhan Standard Time:RU:Europe/Astrakhan: +Astrakhan Standard Time:001:Europe/Astrakhan: +Atlantic Standard Time:BM:Atlantic/Bermuda: +Atlantic Standard Time:CA:America/Halifax: +Atlantic Standard Time:GL:America/Thule: +Atlantic Standard Time:001:America/Halifax: +Aus Central W. Standard Time:AU:Australia/Eucla: +Aus Central W. Standard Time:001:Australia/Eucla: +Azerbaijan Standard Time:AZ:Asia/Baku: +Azerbaijan Standard Time:001:Asia/Baku: +Azores Standard Time:GL:America/Scoresbysund: +Azores Standard Time:PT:Atlantic/Azores: +Azores Standard Time:001:Atlantic/Azores: +Bahia Standard Time:BR:America/Bahia: +Bahia Standard Time:001:America/Bahia: +Bangladesh Standard Time:BD:Asia/Dhaka: +Bangladesh Standard Time:BT:Asia/Thimphu: +Bangladesh Standard Time:001:Asia/Dhaka: +Belarus Standard Time:BY:Europe/Minsk: +Belarus Standard Time:001:Europe/Minsk: +Bougainville Standard Time:PG:Pacific/Bougainville: +Bougainville Standard Time:001:Pacific/Bougainville: +Canada Central Standard Time:CA:America/Regina: +Canada Central Standard Time:001:America/Regina: +Cape Verde Standard Time:CV:Atlantic/Cape_Verde: +Cape Verde Standard Time:ZZ:Etc/GMT+1: +Cape Verde Standard Time:001:Atlantic/Cape_Verde: +Caucasus Standard Time:AM:Asia/Yerevan: +Caucasus Standard Time:001:Asia/Yerevan: +Cen. Australia Standard Time:AU:Australia/Adelaide: +Cen. Australia Standard Time:001:Australia/Adelaide: +Central America Standard Time:BZ:America/Belize: +Central America Standard Time:CR:America/Costa_Rica: +Central America Standard Time:EC:Pacific/Galapagos: +Central America Standard Time:GT:America/Guatemala: +Central America Standard Time:HN:America/Tegucigalpa: +Central America Standard Time:NI:America/Managua: +Central America Standard Time:SV:America/El_Salvador: +Central America Standard Time:ZZ:Etc/GMT+6: +Central America Standard Time:001:America/Guatemala: +Central Asia Standard Time:AQ:Antarctica/Vostok: +Central Asia Standard Time:CN:Asia/Urumqi: +Central Asia Standard Time:IO:Indian/Chagos: +Central Asia Standard Time:KG:Asia/Bishkek: +Central Asia Standard Time:KZ:Asia/Almaty: +Central Asia Standard Time:ZZ:Etc/GMT-6: +Central Asia Standard Time:001:Asia/Almaty: +Central Brazilian Standard Time:BR:America/Cuiaba: +Central Brazilian Standard Time:001:America/Cuiaba: +Central Europe Standard Time:AL:Europe/Tirane: +Central Europe Standard Time:CZ:Europe/Prague: +Central Europe Standard Time:HU:Europe/Budapest: +Central Europe Standard Time:ME:Europe/Podgorica: +Central Europe Standard Time:RS:Europe/Belgrade: +Central Europe Standard Time:SI:Europe/Ljubljana: +Central Europe Standard Time:SK:Europe/Bratislava: +Central Europe Standard Time:001:Europe/Budapest: +Central European Standard Time:BA:Europe/Sarajevo: +Central European Standard Time:HR:Europe/Zagreb: +Central European Standard Time:MK:Europe/Skopje: +Central European Standard Time:PL:Europe/Warsaw: +Central European Standard Time:001:Europe/Warsaw: +Central Pacific Standard Time:AQ:Antarctica/Casey: +Central Pacific Standard Time:FM:Pacific/Ponape: +Central Pacific Standard Time:NC:Pacific/Noumea: +Central Pacific Standard Time:SB:Pacific/Guadalcanal: +Central Pacific Standard Time:VU:Pacific/Efate: +Central Pacific Standard Time:ZZ:Etc/GMT-11: +Central Pacific Standard Time:001:Pacific/Guadalcanal: +Central Standard Time:CA:America/Winnipeg: +Central Standard Time:MX:America/Matamoros: +Central Standard Time:US:America/Chicago: +Central Standard Time:ZZ:CST6CDT: +Central Standard Time:001:America/Chicago: +Central Standard Time (Mexico):MX:America/Mexico_City: +Central Standard Time (Mexico):001:America/Mexico_City: +Chatham Islands Standard Time:NZ:Pacific/Chatham: +Chatham Islands Standard Time:001:Pacific/Chatham: +China Standard Time:CN:Asia/Shanghai: +China Standard Time:HK:Asia/Hong_Kong: +China Standard Time:MO:Asia/Macau: +China Standard Time:001:Asia/Shanghai: +Cuba Standard Time:CU:America/Havana: +Cuba Standard Time:001:America/Havana: +Dateline Standard Time:ZZ:Etc/GMT+12: +Dateline Standard Time:001:Etc/GMT+12: +E. Africa Standard Time:AQ:Antarctica/Syowa: +E. Africa Standard Time:DJ:Africa/Djibouti: +E. Africa Standard Time:ER:Africa/Asmera: +E. Africa Standard Time:ET:Africa/Addis_Ababa: +E. Africa Standard Time:KE:Africa/Nairobi: +E. Africa Standard Time:KM:Indian/Comoro: +E. Africa Standard Time:MG:Indian/Antananarivo: +E. Africa Standard Time:SO:Africa/Mogadishu: +E. Africa Standard Time:TZ:Africa/Dar_es_Salaam: +E. Africa Standard Time:UG:Africa/Kampala: +E. Africa Standard Time:YT:Indian/Mayotte: +E. Africa Standard Time:ZZ:Etc/GMT-3: +E. Africa Standard Time:001:Africa/Nairobi: +E. Australia Standard Time:AU:Australia/Brisbane: +E. Australia Standard Time:001:Australia/Brisbane: +E. Europe Standard Time:MD:Europe/Chisinau: +E. Europe Standard Time:001:Europe/Chisinau: +E. South America Standard Time:BR:America/Sao_Paulo: +E. South America Standard Time:001:America/Sao_Paulo: +Easter Island Standard Time:CL:Pacific/Easter: +Easter Island Standard Time:001:Pacific/Easter: +Eastern Standard Time:BS:America/Nassau: +Eastern Standard Time:CA:America/Toronto: +Eastern Standard Time:US:America/New_York: +Eastern Standard Time:ZZ:EST5EDT: +Eastern Standard Time:001:America/New_York: +Eastern Standard Time (Mexico):MX:America/Cancun: +Eastern Standard Time (Mexico):001:America/Cancun: +Egypt Standard Time:EG:Africa/Cairo: +Egypt Standard Time:001:Africa/Cairo: +Ekaterinburg Standard Time:RU:Asia/Yekaterinburg: +Ekaterinburg Standard Time:001:Asia/Yekaterinburg: +FLE Standard Time:AX:Europe/Mariehamn: +FLE Standard Time:BG:Europe/Sofia: +FLE Standard Time:EE:Europe/Tallinn: +FLE Standard Time:FI:Europe/Helsinki: +FLE Standard Time:LT:Europe/Vilnius: +FLE Standard Time:LV:Europe/Riga: +FLE Standard Time:UA:Europe/Kiev: +FLE Standard Time:001:Europe/Kiev: +Fiji Standard Time:FJ:Pacific/Fiji: +Fiji Standard Time:001:Pacific/Fiji: +GMT Standard Time:ES:Atlantic/Canary: +GMT Standard Time:FO:Atlantic/Faeroe: +GMT Standard Time:GB:Europe/London: +GMT Standard Time:GG:Europe/Guernsey: +GMT Standard Time:IE:Europe/Dublin: +GMT Standard Time:IM:Europe/Isle_of_Man: +GMT Standard Time:JE:Europe/Jersey: +GMT Standard Time:PT:Europe/Lisbon: +GMT Standard Time:001:Europe/London: +GTB Standard Time:CY:Asia/Nicosia: +GTB Standard Time:GR:Europe/Athens: +GTB Standard Time:RO:Europe/Bucharest: +GTB Standard Time:001:Europe/Bucharest: +Georgian Standard Time:GE:Asia/Tbilisi: +Georgian Standard Time:001:Asia/Tbilisi: +Greenland Standard Time:GL:America/Godthab: +Greenland Standard Time:001:America/Godthab: +Greenwich Standard Time:BF:Africa/Ouagadougou: +Greenwich Standard Time:CI:Africa/Abidjan: +Greenwich Standard Time:GH:Africa/Accra: +Greenwich Standard Time:GL:America/Danmarkshavn: +Greenwich Standard Time:GM:Africa/Banjul: +Greenwich Standard Time:GN:Africa/Conakry: +Greenwich Standard Time:GW:Africa/Bissau: +Greenwich Standard Time:IS:Atlantic/Reykjavik: +Greenwich Standard Time:LR:Africa/Monrovia: +Greenwich Standard Time:ML:Africa/Bamako: +Greenwich Standard Time:MR:Africa/Nouakchott: +Greenwich Standard Time:SH:Atlantic/St_Helena: +Greenwich Standard Time:SL:Africa/Freetown: +Greenwich Standard Time:SN:Africa/Dakar: +Greenwich Standard Time:TG:Africa/Lome: +Greenwich Standard Time:001:Atlantic/Reykjavik: +Haiti Standard Time:HT:America/Port-au-Prince: +Haiti Standard Time:001:America/Port-au-Prince: +Hawaiian Standard Time:CK:Pacific/Rarotonga: +Hawaiian Standard Time:PF:Pacific/Tahiti: +Hawaiian Standard Time:UM:Pacific/Johnston: +Hawaiian Standard Time:US:Pacific/Honolulu: +Hawaiian Standard Time:ZZ:Etc/GMT+10: +Hawaiian Standard Time:001:Pacific/Honolulu: +India Standard Time:IN:Asia/Calcutta: +India Standard Time:001:Asia/Calcutta: +Iran Standard Time:IR:Asia/Tehran: +Iran Standard Time:001:Asia/Tehran: +Israel Standard Time:IL:Asia/Jerusalem: +Israel Standard Time:001:Asia/Jerusalem: +Jordan Standard Time:JO:Asia/Amman: +Jordan Standard Time:001:Asia/Amman: +Kaliningrad Standard Time:RU:Europe/Kaliningrad: +Kaliningrad Standard Time:001:Europe/Kaliningrad: +Korea Standard Time:KR:Asia/Seoul: +Korea Standard Time:001:Asia/Seoul: +Libya Standard Time:LY:Africa/Tripoli: +Libya Standard Time:001:Africa/Tripoli: +Line Islands Standard Time:KI:Pacific/Kiritimati: +Line Islands Standard Time:ZZ:Etc/GMT-14: +Line Islands Standard Time:001:Pacific/Kiritimati: +Lord Howe Standard Time:AU:Australia/Lord_Howe: +Lord Howe Standard Time:001:Australia/Lord_Howe: +Magadan Standard Time:RU:Asia/Magadan: +Magadan Standard Time:001:Asia/Magadan: +Magallanes Standard Time:CL:America/Punta_Arenas: +Magallanes Standard Time:001:America/Punta_Arenas: +Marquesas Standard Time:PF:Pacific/Marquesas: +Marquesas Standard Time:001:Pacific/Marquesas: +Mauritius Standard Time:MU:Indian/Mauritius: +Mauritius Standard Time:RE:Indian/Reunion: +Mauritius Standard Time:SC:Indian/Mahe: +Mauritius Standard Time:001:Indian/Mauritius: +Middle East Standard Time:LB:Asia/Beirut: +Middle East Standard Time:001:Asia/Beirut: +Montevideo Standard Time:UY:America/Montevideo: +Montevideo Standard Time:001:America/Montevideo: +Morocco Standard Time:EH:Africa/El_Aaiun: +Morocco Standard Time:MA:Africa/Casablanca: +Morocco Standard Time:001:Africa/Casablanca: +Mountain Standard Time:CA:America/Edmonton: +Mountain Standard Time:MX:America/Ojinaga: +Mountain Standard Time:US:America/Denver: +Mountain Standard Time:ZZ:MST7MDT: +Mountain Standard Time:001:America/Denver: +Mountain Standard Time (Mexico):MX:America/Chihuahua: +Mountain Standard Time (Mexico):001:America/Chihuahua: +Myanmar Standard Time:CC:Indian/Cocos: +Myanmar Standard Time:MM:Asia/Rangoon: +Myanmar Standard Time:001:Asia/Rangoon: +N. Central Asia Standard Time:RU:Asia/Novosibirsk: +N. Central Asia Standard Time:001:Asia/Novosibirsk: +Namibia Standard Time:NA:Africa/Windhoek: +Namibia Standard Time:001:Africa/Windhoek: +Nepal Standard Time:NP:Asia/Katmandu: +Nepal Standard Time:001:Asia/Katmandu: +New Zealand Standard Time:AQ:Antarctica/McMurdo: +New Zealand Standard Time:NZ:Pacific/Auckland: +New Zealand Standard Time:001:Pacific/Auckland: +Newfoundland Standard Time:CA:America/St_Johns: +Newfoundland Standard Time:001:America/St_Johns: +Norfolk Standard Time:NF:Pacific/Norfolk: +Norfolk Standard Time:001:Pacific/Norfolk: +North Asia East Standard Time:RU:Asia/Irkutsk: +North Asia East Standard Time:001:Asia/Irkutsk: +North Asia Standard Time:RU:Asia/Krasnoyarsk: +North Asia Standard Time:001:Asia/Krasnoyarsk: +North Korea Standard Time:KP:Asia/Pyongyang: +North Korea Standard Time:001:Asia/Pyongyang: +Omsk Standard Time:RU:Asia/Omsk: +Omsk Standard Time:001:Asia/Omsk: +Pacific SA Standard Time:CL:America/Santiago: +Pacific SA Standard Time:001:America/Santiago: +Pacific Standard Time:CA:America/Vancouver: +Pacific Standard Time:US:America/Los_Angeles: +Pacific Standard Time:ZZ:PST8PDT: +Pacific Standard Time:001:America/Los_Angeles: +Pacific Standard Time (Mexico):MX:America/Tijuana: +Pacific Standard Time (Mexico):001:America/Tijuana: +Pakistan Standard Time:PK:Asia/Karachi: +Pakistan Standard Time:001:Asia/Karachi: +Paraguay Standard Time:PY:America/Asuncion: +Paraguay Standard Time:001:America/Asuncion: +Qyzylorda Standard Time:KZ:Asia/Qyzylorda: +Qyzylorda Standard Time:001:Asia/Qyzylorda: +Romance Standard Time:BE:Europe/Brussels: +Romance Standard Time:DK:Europe/Copenhagen: +Romance Standard Time:ES:Europe/Madrid: +Romance Standard Time:FR:Europe/Paris: +Romance Standard Time:001:Europe/Paris: +Russia Time Zone 10:RU:Asia/Srednekolymsk: +Russia Time Zone 10:001:Asia/Srednekolymsk: +Russia Time Zone 11:RU:Asia/Kamchatka: +Russia Time Zone 11:001:Asia/Kamchatka: +Russia Time Zone 3:RU:Europe/Samara: +Russia Time Zone 3:001:Europe/Samara: +Russian Standard Time:RU:Europe/Moscow: +Russian Standard Time:UA:Europe/Simferopol: +Russian Standard Time:001:Europe/Moscow: +SA Eastern Standard Time:AQ:Antarctica/Rothera: +SA Eastern Standard Time:BR:America/Fortaleza: +SA Eastern Standard Time:FK:Atlantic/Stanley: +SA Eastern Standard Time:GF:America/Cayenne: +SA Eastern Standard Time:SR:America/Paramaribo: +SA Eastern Standard Time:ZZ:Etc/GMT+3: +SA Eastern Standard Time:001:America/Cayenne: +SA Pacific Standard Time:BR:America/Rio_Branco: +SA Pacific Standard Time:CA:America/Coral_Harbour: +SA Pacific Standard Time:CO:America/Bogota: +SA Pacific Standard Time:EC:America/Guayaquil: +SA Pacific Standard Time:JM:America/Jamaica: +SA Pacific Standard Time:KY:America/Cayman: +SA Pacific Standard Time:PA:America/Panama: +SA Pacific Standard Time:PE:America/Lima: +SA Pacific Standard Time:ZZ:Etc/GMT+5: +SA Pacific Standard Time:001:America/Bogota: +SA Western Standard Time:AG:America/Antigua: +SA Western Standard Time:AI:America/Anguilla: +SA Western Standard Time:AW:America/Aruba: +SA Western Standard Time:BB:America/Barbados: +SA Western Standard Time:BL:America/St_Barthelemy: +SA Western Standard Time:BO:America/La_Paz: +SA Western Standard Time:BQ:America/Kralendijk: +SA Western Standard Time:BR:America/Manaus: +SA Western Standard Time:CA:America/Blanc-Sablon: +SA Western Standard Time:CW:America/Curacao: +SA Western Standard Time:DM:America/Dominica: +SA Western Standard Time:DO:America/Santo_Domingo: +SA Western Standard Time:GD:America/Grenada: +SA Western Standard Time:GP:America/Guadeloupe: +SA Western Standard Time:GY:America/Guyana: +SA Western Standard Time:KN:America/St_Kitts: +SA Western Standard Time:LC:America/St_Lucia: +SA Western Standard Time:MF:America/Marigot: +SA Western Standard Time:MQ:America/Martinique: +SA Western Standard Time:MS:America/Montserrat: +SA Western Standard Time:PR:America/Puerto_Rico: +SA Western Standard Time:SX:America/Lower_Princes: +SA Western Standard Time:TT:America/Port_of_Spain: +SA Western Standard Time:VC:America/St_Vincent: +SA Western Standard Time:VG:America/Tortola: +SA Western Standard Time:VI:America/St_Thomas: +SA Western Standard Time:ZZ:Etc/GMT+4: +SA Western Standard Time:001:America/La_Paz: +SE Asia Standard Time:AQ:Antarctica/Davis: +SE Asia Standard Time:CX:Indian/Christmas: +SE Asia Standard Time:ID:Asia/Jakarta: +SE Asia Standard Time:KH:Asia/Phnom_Penh: +SE Asia Standard Time:LA:Asia/Vientiane: +SE Asia Standard Time:TH:Asia/Bangkok: +SE Asia Standard Time:VN:Asia/Saigon: +SE Asia Standard Time:ZZ:Etc/GMT-7: +SE Asia Standard Time:001:Asia/Bangkok: +Saint Pierre Standard Time:PM:America/Miquelon: +Saint Pierre Standard Time:001:America/Miquelon: +Sakhalin Standard Time:RU:Asia/Sakhalin: +Sakhalin Standard Time:001:Asia/Sakhalin: +Samoa Standard Time:WS:Pacific/Apia: +Samoa Standard Time:001:Pacific/Apia: +Sao Tome Standard Time:ST:Africa/Sao_Tome: +Sao Tome Standard Time:001:Africa/Sao_Tome: +Saratov Standard Time:RU:Europe/Saratov: +Saratov Standard Time:001:Europe/Saratov: +Singapore Standard Time:BN:Asia/Brunei: +Singapore Standard Time:ID:Asia/Makassar: +Singapore Standard Time:MY:Asia/Kuala_Lumpur: +Singapore Standard Time:PH:Asia/Manila: +Singapore Standard Time:SG:Asia/Singapore: +Singapore Standard Time:ZZ:Etc/GMT-8: +Singapore Standard Time:001:Asia/Singapore: +South Africa Standard Time:BI:Africa/Bujumbura: +South Africa Standard Time:BW:Africa/Gaborone: +South Africa Standard Time:CD:Africa/Lubumbashi: +South Africa Standard Time:LS:Africa/Maseru: +South Africa Standard Time:MW:Africa/Blantyre: +South Africa Standard Time:MZ:Africa/Maputo: +South Africa Standard Time:RW:Africa/Kigali: +South Africa Standard Time:SS:Africa/Juba: +South Africa Standard Time:SZ:Africa/Mbabane: +South Africa Standard Time:ZA:Africa/Johannesburg: +South Africa Standard Time:ZM:Africa/Lusaka: +South Africa Standard Time:ZW:Africa/Harare: +South Africa Standard Time:ZZ:Etc/GMT-2: +South Africa Standard Time:001:Africa/Johannesburg: +Sri Lanka Standard Time:LK:Asia/Colombo: +Sri Lanka Standard Time:001:Asia/Colombo: +Sudan Standard Time:SD:Africa/Khartoum: +Sudan Standard Time:001:Africa/Khartoum: +Syria Standard Time:SY:Asia/Damascus: +Syria Standard Time:001:Asia/Damascus: +Taipei Standard Time:TW:Asia/Taipei: +Taipei Standard Time:001:Asia/Taipei: +Tasmania Standard Time:AU:Australia/Hobart: +Tasmania Standard Time:001:Australia/Hobart: +Tocantins Standard Time:BR:America/Araguaina: +Tocantins Standard Time:001:America/Araguaina: +Tokyo Standard Time:ID:Asia/Jayapura: +Tokyo Standard Time:JP:Asia/Tokyo: +Tokyo Standard Time:PW:Pacific/Palau: +Tokyo Standard Time:TL:Asia/Dili: +Tokyo Standard Time:ZZ:Etc/GMT-9: +Tokyo Standard Time:001:Asia/Tokyo: +Tomsk Standard Time:RU:Asia/Tomsk: +Tomsk Standard Time:001:Asia/Tomsk: +Tonga Standard Time:TO:Pacific/Tongatapu: +Tonga Standard Time:001:Pacific/Tongatapu: +Transbaikal Standard Time:RU:Asia/Chita: +Transbaikal Standard Time:001:Asia/Chita: +Turkey Standard Time:TR:Europe/Istanbul: +Turkey Standard Time:001:Europe/Istanbul: +Turks And Caicos Standard Time:TC:America/Grand_Turk: +Turks And Caicos Standard Time:001:America/Grand_Turk: +US Eastern Standard Time:US:America/Indianapolis: +US Eastern Standard Time:001:America/Indianapolis: +US Mountain Standard Time:CA:America/Creston: +US Mountain Standard Time:MX:America/Hermosillo: +US Mountain Standard Time:US:America/Phoenix: +US Mountain Standard Time:ZZ:Etc/GMT+7: +US Mountain Standard Time:001:America/Phoenix: +UTC:ZZ:Etc/UTC: +UTC:001:Etc/UTC: +UTC+12:KI:Pacific/Tarawa: +UTC+12:MH:Pacific/Majuro: +UTC+12:NR:Pacific/Nauru: +UTC+12:TV:Pacific/Funafuti: +UTC+12:UM:Pacific/Wake: +UTC+12:WF:Pacific/Wallis: +UTC+12:ZZ:Etc/GMT-12: +UTC+12:001:Etc/GMT-12: +UTC+13:KI:Pacific/Enderbury: +UTC+13:TK:Pacific/Fakaofo: +UTC+13:ZZ:Etc/GMT-13: +UTC+13:001:Etc/GMT-13: +UTC-02:BR:America/Noronha: +UTC-02:GS:Atlantic/South_Georgia: +UTC-02:ZZ:Etc/GMT+2: +UTC-02:001:Etc/GMT+2: +UTC-08:PN:Pacific/Pitcairn: +UTC-08:ZZ:Etc/GMT+8: +UTC-08:001:Etc/GMT+8: +UTC-09:PF:Pacific/Gambier: +UTC-09:ZZ:Etc/GMT+9: +UTC-09:001:Etc/GMT+9: +UTC-11:AS:Pacific/Pago_Pago: +UTC-11:NU:Pacific/Niue: +UTC-11:UM:Pacific/Midway: +UTC-11:ZZ:Etc/GMT+11: +UTC-11:001:Etc/GMT+11: +Ulaanbaatar Standard Time:MN:Asia/Ulaanbaatar: +Ulaanbaatar Standard Time:001:Asia/Ulaanbaatar: +Venezuela Standard Time:VE:America/Caracas: +Venezuela Standard Time:001:America/Caracas: +Vladivostok Standard Time:RU:Asia/Vladivostok: +Vladivostok Standard Time:001:Asia/Vladivostok: +Volgograd Standard Time:RU:Europe/Volgograd: +Volgograd Standard Time:001:Europe/Volgograd: +W. Australia Standard Time:AU:Australia/Perth: +W. Australia Standard Time:001:Australia/Perth: +W. Central Africa Standard Time:AO:Africa/Luanda: +W. Central Africa Standard Time:BJ:Africa/Porto-Novo: +W. Central Africa Standard Time:CD:Africa/Kinshasa: +W. Central Africa Standard Time:CF:Africa/Bangui: +W. Central Africa Standard Time:CG:Africa/Brazzaville: +W. Central Africa Standard Time:CM:Africa/Douala: +W. Central Africa Standard Time:DZ:Africa/Algiers: +W. Central Africa Standard Time:GA:Africa/Libreville: +W. Central Africa Standard Time:GQ:Africa/Malabo: +W. Central Africa Standard Time:NE:Africa/Niamey: +W. Central Africa Standard Time:NG:Africa/Lagos: +W. Central Africa Standard Time:TD:Africa/Ndjamena: +W. Central Africa Standard Time:TN:Africa/Tunis: +W. Central Africa Standard Time:ZZ:Etc/GMT-1: +W. Central Africa Standard Time:001:Africa/Lagos: +W. Europe Standard Time:AD:Europe/Andorra: +W. Europe Standard Time:AT:Europe/Vienna: +W. Europe Standard Time:CH:Europe/Zurich: +W. Europe Standard Time:DE:Europe/Berlin: +W. Europe Standard Time:GI:Europe/Gibraltar: +W. Europe Standard Time:IT:Europe/Rome: +W. Europe Standard Time:LI:Europe/Vaduz: +W. Europe Standard Time:LU:Europe/Luxembourg: +W. Europe Standard Time:MC:Europe/Monaco: +W. Europe Standard Time:MT:Europe/Malta: +W. Europe Standard Time:NL:Europe/Amsterdam: +W. Europe Standard Time:NO:Europe/Oslo: +W. Europe Standard Time:SE:Europe/Stockholm: +W. Europe Standard Time:SJ:Arctic/Longyearbyen: +W. Europe Standard Time:SM:Europe/San_Marino: +W. Europe Standard Time:VA:Europe/Vatican: +W. Europe Standard Time:001:Europe/Berlin: +W. Mongolia Standard Time:MN:Asia/Hovd: +W. Mongolia Standard Time:001:Asia/Hovd: +West Asia Standard Time:AQ:Antarctica/Mawson: +West Asia Standard Time:KZ:Asia/Oral: +West Asia Standard Time:MV:Indian/Maldives: +West Asia Standard Time:TF:Indian/Kerguelen: +West Asia Standard Time:TJ:Asia/Dushanbe: +West Asia Standard Time:TM:Asia/Ashgabat: +West Asia Standard Time:UZ:Asia/Tashkent: +West Asia Standard Time:ZZ:Etc/GMT-5: +West Asia Standard Time:001:Asia/Tashkent: +West Bank Standard Time:PS:Asia/Hebron: +West Bank Standard Time:001:Asia/Hebron: +West Pacific Standard Time:AQ:Antarctica/DumontDUrville: +West Pacific Standard Time:FM:Pacific/Truk: +West Pacific Standard Time:GU:Pacific/Guam: +West Pacific Standard Time:MP:Pacific/Saipan: +West Pacific Standard Time:PG:Pacific/Port_Moresby: +West Pacific Standard Time:ZZ:Etc/GMT-10: +West Pacific Standard Time:001:Pacific/Port_Moresby: +Yakutsk Standard Time:RU:Asia/Yakutsk: +Yakutsk Standard Time:001:Asia/Yakutsk: +Yukon Standard Time:CA:America/Whitehorse: +Yukon Standard Time:001:America/Whitehorse: diff --git a/install-packages/windows/mksdfs.exe b/install-packages/windows/mksdfs.exe index ff41cd032..196d20aaf 100644 Binary files a/install-packages/windows/mksdfs.exe and b/install-packages/windows/mksdfs.exe differ diff --git a/install-packages/windows/mountsdfs.exe b/install-packages/windows/mountsdfs.exe index 41b28cef3..1b33a4c4c 100644 Binary files a/install-packages/windows/mountsdfs.exe and b/install-packages/windows/mountsdfs.exe differ diff --git a/install-packages/windows/VC_redist.x64.exe b/install-packages/windows/sdfs-proxy-s.exe similarity index 55% rename from install-packages/windows/VC_redist.x64.exe rename to install-packages/windows/sdfs-proxy-s.exe index a84012bc6..4bf9df221 100644 Binary files a/install-packages/windows/VC_redist.x64.exe and b/install-packages/windows/sdfs-proxy-s.exe differ diff --git a/install-packages/windows/sdfs-proxy.exe b/install-packages/windows/sdfs-proxy.exe index 443ebb153..1fec0b7fc 100644 Binary files a/install-packages/windows/sdfs-proxy.exe and b/install-packages/windows/sdfs-proxy.exe differ diff --git a/install-packages/windows/sdfs.ico b/install-packages/windows/sdfs.ico deleted file mode 100644 index c5952a95b..000000000 Binary files a/install-packages/windows/sdfs.ico and /dev/null differ diff --git a/install-packages/windows/sdfs_win.nsi b/install-packages/windows/sdfs_win.nsi deleted file mode 100644 index d4c3a777b..000000000 --- a/install-packages/windows/sdfs_win.nsi +++ /dev/null @@ -1,183 +0,0 @@ -; MUI Settings -; MUI Settings / Icons -; Sets the theme path - -Unicode True -#!define VERSION -#!define JARVERSION - -!define MUI_PRODUCT "SDFS Cloud File System" - -;-------------------------------- -;Include Modern UI -!include LogicLib.nsh -!include x64.nsh -!include "MUI2.nsh" -!include WinVer.nsh -!include "MUI2.nsh" - -!define MUI_ICON "sdfs.ico" -!define MUI_HEADERIMAGE -!define MUI_HEADERIMAGE_BITMAP "sdfs.ico" -!define MUI_HEADERIMAGE_RIGHT -!define SF_USELECTED 0 - -;-------------------------------- -;General - ;Name and file - Name "SDFS Cloud File System ${VERSION}" - OutFile "..\SDFS-${VERSION}-Setup.exe" - - ;Default installation folder - InstallDir $PROGRAMFILES64\sdfs - - - ;Request application privileges for Windows Vista - RequestExecutionLevel admin - BrandingText "${MUI_PRODUCT} ${VERSION}" - - -!macro SecUnSelect SecId - Push $0 - IntOp $0 ${SF_USELECTED} | ${SF_RO} - SectionSetFlags ${SecId} $0 - SectionSetText ${SecId} "" - Pop $0 -!macroend - -!define UnSelectSection '!insertmacro SecUnSelect' - - - - -;-------------------------------- - -;-------------------------------- -;Interface Settings - - !define MUI_ABORTWARNING - -;-------------------------------- -;Pages - - !insertmacro MUI_PAGE_COMPONENTS - !insertmacro MUI_PAGE_DIRECTORY - !insertmacro MUI_PAGE_INSTFILES - - !insertmacro MUI_UNPAGE_CONFIRM - !insertmacro MUI_UNPAGE_INSTFILES - -;-------------------------------- -;Languages - - !insertmacro MUI_LANGUAGE "English" - !addplugindir "C:\Program Files (x86)\NSIS\Plugins\amd64-unicode" - - ;-------------------------------- - ;Version Information - VIProductVersion "${VERSION}.0" - VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "OpenDedupe SDFS" - VIAddVersionKey /LANG=${LANG_ENGLISH} "Comments" "A Cloud Deduplication FileSystem" - VIAddVersionKey /LANG=${LANG_ENGLISH} "CompanyName" "Datish Systems" - VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "Copyright Datish Systems LLC" - VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "SDFS Setup" - VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "${VERSION}.0" - VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductVersion" "${VERSION}.0" -;-------------------------------- -;Installer Sections - - - - - -Section "SDFS Setup" SecMain - SetOutPath "$INSTDIR" - SectionIn RO - File * - SetOutPath "$INSTDIR\bin" - File /r bin\* - SetOutPath "$INSTDIR\lib" - File /oname=sdfs.jar ..\..\target\sdfs-${JARVERSION}.jar - File ..\..\target\lib\*.jar - SetOutPath "$INSTDIR\etc" - File etc\* - ;Store installation folder - WriteRegStr HKLM "Software\SDFS" "path" $INSTDIR - EnVar::SetHKLM - ; Add a value - EnVar::AddValue "path" "$INSTDIR" - Pop $0 - DetailPrint "EnVar::AddValue returned=|$0|" - ;Create uninstaller - WriteUninstaller "$INSTDIR\Uninstall.exe" - ; Write the uninstall keys for Windows - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\SDFS" "DisplayName" "SDFS ${VERSION} (remove only)" - WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\SDFS" "UninstallString" '"$INSTDIR\Uninstall.exe"' - WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\SDFS" "NoModify" 1 - WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\SDFS" "NoRepair" 1 - - AccessControl::GrantOnFile \ - "$INSTDIR" "(BU)" "GenericRead + GenericWrite" -SectionEnd - -Section "Visual Studio Runtime" - SetOutPath "$INSTDIR" - ExecWait '"$INSTDIR\VC_redist.x64.exe" /quiet' - Delete "$INSTDIR\VC_redist.x64.exe" -SectionEnd - - -Function .onInstSuccess - IfSilent noreboot - MessageBox MB_OK "You have successfully installed ${MUI_PRODUCT}." - noreboot: -FunctionEnd - -Function un.onUninstSuccess - MessageBox MB_OK "You have successfully uninstalled ${MUI_PRODUCT}." -FunctionEnd - -Function .onInit - ${If} ${RunningX64} - - ${Else} - MessageBox MB_OK "Your OS is not supported. ${MUI_PRODUCT} supports Windows for x64." - SetErrorlevel 1 - Abort - ${EndIf} - ReadRegStr $0 HKLM "Software\SDFS" "path" - IfErrors 0 +2 - Goto done - ReadRegStr $INSTDIR HKLM "Software\SDFS" "path" - MessageBox MB_YESNO "Upgrade Existing Setup to ${VERSION}?" IDNO noupgrade - RMDir /r "$INSTDIR\bin" - RMDir /r "$INSTDIR\lib" - Goto done - noupgrade: - SetErrorlevel 1 - Quit - done: -FunctionEnd -;-------------------------------- -;Descriptions -;Language strings - LangString DESC_SecMain ${LANG_ENGLISH} "SDFS Volume Binaries Setup." -;Assign language strings to sections - !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN - !insertmacro MUI_DESCRIPTION_TEXT ${SecMain} $(DESC_SecMain) - !insertmacro MUI_FUNCTION_DESCRIPTION_END - -;-------------------------------- -;Uninstaller Section - -Section "Uninstall" - ;ADD YOUR OWN FILES HERE... - RMDir /r "$INSTDIR\*.*" - RMDir /r "$INSTDIR\bin" - RMDir /r "$INSTDIR\lib" - ReadRegStr $0 HKLM "Software\SDFS" "path" - EnVar::SetHKLM - EnVar::DeleteValue "path" "$0" - DeleteRegKey HKLM "Software\SDFS" - DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\SDFS" -SectionEnd \ No newline at end of file diff --git a/install-packages/windows/sdfscli.exe b/install-packages/windows/sdfscli.exe new file mode 100644 index 000000000..7fa18e8cc Binary files /dev/null and b/install-packages/windows/sdfscli.exe differ diff --git a/install-packages/windows/startsdfs.exe b/install-packages/windows/startsdfs.exe index 5f7b2b4ee..c542287c2 100644 Binary files a/install-packages/windows/startsdfs.exe and b/install-packages/windows/startsdfs.exe differ diff --git a/log4j.properties b/log4j.properties index 2cf3df799..58a14c72d 100644 --- a/log4j.properties +++ b/log4j.properties @@ -2,6 +2,7 @@ log4j.logger.org.quartz=Warn, stdout log4j.logger.sdfs=INFO, stdout log4j.rootLogger=R +log4j.logger.com.amazonaws = ERROR log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout diff --git a/pom.xml b/pom.xml index 92f3da6ee..9b6450b38 100644 --- a/pom.xml +++ b/pom.xml @@ -1,5 +1,4 @@ - + 4.0.0 org.opendedup @@ -24,7 +23,7 @@ true - + false @@ -45,12 +44,6 @@ ascii_table 1.0 - - - org.apache.hadoop - hadoop-common - 3.3.0 - de.schlichtherle.truezip truezip-file @@ -69,7 +62,7 @@ com.google.cloud google-cloud-pubsub - 1.108.1 + 1.119.1 com.google.auth @@ -109,13 +102,13 @@ org.bouncycastle bcprov-jdk15on - 1.68 + 1.70 org.bouncycastle bcpkix-jdk15on - 1.68 - + 1.70 + org.opendedupe utils @@ -126,11 +119,6 @@ commons-io 2.7 - - org.slf4j - slf4j-api - 1.7.25 - org.opendedupe jdokan @@ -149,7 +137,7 @@ org.apache.logging.log4j log4j-core - 2.13.3 + 2.17.2 com.google.guava @@ -175,13 +163,23 @@ org.apache.jclouds jclouds-allblobstore - 2.3.0 + 2.5.0 + + + jakarta.xml.bind + jakarta.xml.bind-api + 3.0.0 org.mapdb mapdb 3.0.8 + + org.apache.commons + commons-lang3 + 3.12.0 + com.rabbitmq amqp-client @@ -197,21 +195,15 @@ httpcore 4.4.13 - - - net.sf.jpam - jpam - 1.1 - org.apache.jclouds.provider b2 - 2.3.0 + 2.5.0 org.apache.jclouds.provider google-cloud-storage - 2.3.0 + 2.5.0 junit @@ -223,8 +215,15 @@ com.amazonaws aws-java-sdk-s3 - 1.12.32 + 1.12.243 + + + org.apache.logging.log4j + log4j-core + 2.17.2 + + org.quartz-scheduler quartz @@ -233,55 +232,56 @@ com.microsoft.azure azure-storage - 8.4.0 + 8.6.6 org.rocksdb rocksdbjni - 6.10.2 + 6.28.2 io.grpc grpc-netty-shaded - 1.36.1 - - + 1.46.0 + + io.grpc grpc-protobuf - 1.36.1 - - + 1.46.0 + + io.grpc grpc-stub - 1.36.1 - - + 1.46.0 + + io.grpc grpc-core - 1.36.1 + 1.46.0 - + + org.apache.tomcat annotations-api 6.0.53 provided - + io.grpc protoc-gen-grpc-java - 1.31.1 + 1.46.0 pom com.google.protobuf protobuf-java - 3.12.2 + 3.19.4 - src/resources + resources version.properties @@ -301,7 +301,7 @@ - + pl.project13.maven git-commit-id-plugin 4.0.0 @@ -366,7 +366,6 @@ - - + \ No newline at end of file diff --git a/pool0-volume-cfg.xml b/pool0-volume-cfg.xml new file mode 100644 index 000000000..3f190eb11 --- /dev/null +++ b/pool0-volume-cfg.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/src/resources/version.properties b/resources/version.properties similarity index 100% rename from src/resources/version.properties rename to resources/version.properties diff --git a/src/fuse/SDFS/MountSDFS.java b/src/fuse/SDFS/MountSDFS.java index d06158dab..aa3ba5752 100644 --- a/src/fuse/SDFS/MountSDFS.java +++ b/src/fuse/SDFS/MountSDFS.java @@ -16,7 +16,6 @@ import org.apache.commons.daemon.DaemonInitException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.log4j.BasicConfigurator; import org.opendedup.logging.SDFSLogger; import org.opendedup.sdfs.Main; import org.opendedup.sdfs.servers.SDFSService; @@ -38,11 +37,11 @@ public static Options buildOptions() { options.addOption("o", true, "fuse mount options.\nWill default to: \ndirect_io,big_writes,allow_other,fsname=SDFS"); options.addOption("r", false, "Restores files from cloud storage if the backend cloud store supports it"); - options.addOption("d", false, "debug output"); options.addOption("p", true, "port to use for sdfs cli"); options.addOption("l", false, "Compact Volume on Disk"); options.addOption("c", false, "Runs Consistency Check"); options.addOption("e", true, "password to decrypt config"); + options.addOption("j", true, "environmental variable to decrypt config"); options.addOption("n", false, "disable drive mount"); options.addOption("m", true, "mount point for SDFS file system \n e.g. /media/dedup"); options.addOption("v", true, "sdfs volume to mount \ne.g. dedup"); @@ -54,11 +53,12 @@ public static Options buildOptions() { options.addOption("b", true, "Folder basepath for sdfs to be used in linux os, same as sdfs-base-path in mkfs.sdfs. \n e.g. /opt/test"); options.addOption("t", true, "Temporary directory for sdfs to be used in linux os. \n e.g. /tmp"); + options.addOption("a", false, "Runs Consistency Check Periodically"); + options.addOption("u", false, "Disables TLS and forces localhost"); return options; } public static void main(String[] args) throws ParseException { - BasicConfigurator.configure(); setup(args); try { if (!OSValidator.isWindows()) { @@ -121,6 +121,9 @@ private static void setup(String[] args) throws ParseException { if (cmd.hasOption("c")) { Main.runConsistancyCheck = true; } + if (cmd.hasOption("a")) { + Main.runConsistancyCheckPeriodically = true; + } if (cmd.hasOption("q")) { SDFSLogger.useConsoleLogger(); } @@ -131,6 +134,11 @@ private static void setup(String[] args) throws ParseException { if (cmd.hasOption("e")) { password = cmd.getOptionValue("e"); } + if (cmd.hasOption("j")) { + String jv = cmd.getOptionValue("j"); + password = System.getenv(jv); + } + if (cmd.hasOption("p")) { port = Integer.parseInt(cmd.getOptionValue("p")); } @@ -196,7 +204,10 @@ private static void setup(String[] args) throws ParseException { Main.logPath = OSValidator.getProgramBasePath() + "/var/log/sdfs/" + volname + ".log"; } } - Main.logPath = "/var/log/sdfs/" + volname + ".log"; + if(cmd.hasOption("u")) { + Main.usePortRedirector = true; + } + //Main.logPath = "/var/log/sdfs/" + volname + ".log"; if (OSValidator.isWindows()) { File cf = new File(volumeConfigFile); String fn = cf.getName().substring(0, cf.getName().lastIndexOf(".")) + ".log"; @@ -205,16 +216,17 @@ private static void setup(String[] args) throws ParseException { lf.getParentFile().mkdirs(); } sdfsService = new SDFSService(volumeConfigFile, volumes); - if (cmd.hasOption("d")) { - SDFSLogger.setLevel(0); - } - try { sdfsService.start(port, password, cmd.hasOption("s")); } catch (Throwable e1) { e1.printStackTrace(); System.out.println("Exiting because " + e1.toString()); - System.exit(-1); + if(e1.toString().contains("No port Available in range Specified")) + { + System.exit(-2); + } + else + System.exit(-1); } shutdownHook = new ShutdownHook(sdfsService, cmd.getOptionValue("m")); mountOptions = cmd.getOptionValue("m"); diff --git a/src/fuse/SDFS/SDFSFileSystem.java b/src/fuse/SDFS/SDFSFileSystem.java index 146ace664..04ae41910 100644 --- a/src/fuse/SDFS/SDFSFileSystem.java +++ b/src/fuse/SDFS/SDFSFileSystem.java @@ -217,8 +217,7 @@ public int fsync(String path, long fh, boolean isDatasync) throws FuseException DedupFileChannel ch = this.getFileChannel(path, (Long) fh, -1); if (Main.safeSync) { - if (SDFSLogger.isDebug()) - SDFSLogger.getLog().debug("sync " + path + " df=" + ch.getDedupFile().getGUID()); + SDFSLogger.getLog().debug("sync " + path + " df=" + ch.getDedupFile().getGUID()); ch.force(true); } @@ -445,7 +444,7 @@ public int mknod(String path, int mode, int rdev) throws FuseException { * } else { try { Thread.sleep(1); } catch (InterruptedException e) { throw new * FuseException( "file creation interrupted for " + path) * .initErrno(Errno.EACCES); } } - * + * * } */ try { @@ -506,7 +505,7 @@ public int read(String path, long fh, ByteBuffer buf, long offset) throws FuseEx * buf.position()]; buf.put(k); // SDFSLogger.getLog().info("zzz=" // * +(buf.capacity()-buf.position())); } byte[] b = new byte[buf.capacity()]; * buf.position(0); buf.get(b); buf.position(0); - * + * * SDFSLogger.getLog().info("read " + path + " len" + buf.capacity() + "offset " * + offset + "read" + read + "==" + new String(b) + "==\n\n"); */ @@ -566,8 +565,7 @@ public int rename(String from, String to) throws FuseException { File f = null; try { - if (SDFSLogger.isDebug()) - SDFSLogger.getLog().debug("renaming [" + from + "] to [" + to + "]"); + SDFSLogger.getLog().debug("renaming [" + from + "] to [" + to + "]"); f = resolvePath(from); File nf = new File(this.mountedVolume + to); try { @@ -613,8 +611,7 @@ public int rmdir(String path) throws FuseException { return 0; else { - if (SDFSLogger.isDebug()) - SDFSLogger.getLog().debug("unable to delete folder " + f.getCanonicalPath()); + SDFSLogger.getLog().debug("unable to delete folder " + f.getCanonicalPath()); throw new FuseException().initErrno(Errno.ENOTEMPTY); } @@ -721,8 +718,7 @@ public int unlink(String path) throws FuseException { // Thread.currentThread().setName("19 // "+Long.toString(System.currentTimeMillis())); try { - if (SDFSLogger.isDebug()) - SDFSLogger.getLog().debug("removing " + path); + SDFSLogger.getLog().debug("removing " + path); if (!Main.safeClose) { try { @@ -742,9 +738,9 @@ public int unlink(String path) throws FuseException { // SDFSLogger.getLog().info("deleting symlink " + f.getCanonicalPath()); try { MetaDataDedupFile mf = MetaFileStore.getMF(this.resolvePath(path)); - try{ + try { eventBus.post(new MFileDeleted(mf)); - }catch(Exception e) { + } catch (Exception e) { SDFSLogger.getLog().error("unable to post delete event " + path, e); } Files.delete(p); @@ -1081,8 +1077,7 @@ public int setxattr(String path, String name, ByteBuffer value, int flags) throw File f = this.resolvePath(path); MetaDataDedupFile mf = MetaFileStore.getMF(f); mf.addXAttribute(name, valStr); - if (SDFSLogger.isDebug()) - SDFSLogger.getLog().debug("set " + name + " to " + valStr); + SDFSLogger.getLog().debug("set " + name + " to " + valStr); if (mf.isFile()) mf.setDirty(true); diff --git a/src/log4j.properties b/src/log4j.properties index d617dd1bb..66be30806 100644 --- a/src/log4j.properties +++ b/src/log4j.properties @@ -1,2 +1,2 @@ -log4j.logger.com.amazonaws=WARN -log4j.logger.org.quartz=OFF \ No newline at end of file +log4j.logger.com.amazonaws=ERROR +log4j.logger.org.quartz=OFF diff --git a/src/org/opendedup/collections/InsertRecord.java b/src/org/opendedup/collections/InsertRecord.java index 2fe34364a..78f2b256d 100644 --- a/src/org/opendedup/collections/InsertRecord.java +++ b/src/org/opendedup/collections/InsertRecord.java @@ -24,10 +24,18 @@ public class InsertRecord { private boolean inserted; private byte[] hashlocs; + private int compressedLen; - public InsertRecord(boolean inserted, long pos) { + public InsertRecord(int compressedLen, long pos) { + this.compressedLen = compressedLen; + this.inserted = true; + this.hashlocs = Longs.toByteArray(pos); + } + + public InsertRecord(boolean inserted, long pos, int compressedLen) { this.inserted = inserted; this.hashlocs = Longs.toByteArray(pos); + this.compressedLen = compressedLen; } public InsertRecord(boolean inserted, byte[] locs) { @@ -35,6 +43,10 @@ public InsertRecord(boolean inserted, byte[] locs) { this.hashlocs = locs; } + public void setCompressedLength(int len) { + this.compressedLen = len; + } + public boolean getInserted() { return this.inserted; } @@ -47,10 +59,15 @@ public byte[] getHashLocs() { return this.hashlocs; } + public int getCompressedLength() { + return this.compressedLen; + } + public org.opendedup.grpc.Storage.InsertRecord toProtoBuf() { org.opendedup.grpc.Storage.InsertRecord.Builder b = org.opendedup.grpc.Storage.InsertRecord.newBuilder(); b.setHashloc(Longs.fromByteArray(this.hashlocs)); b.setInserted(this.inserted); + b.setCompressedLength(this.compressedLen); return b.build(); } diff --git a/src/org/opendedup/collections/LongByteArrayMap.java b/src/org/opendedup/collections/LongByteArrayMap.java index d799c351c..059fd1a6c 100644 --- a/src/org/opendedup/collections/LongByteArrayMap.java +++ b/src/org/opendedup/collections/LongByteArrayMap.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com + * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com * * This file is part of OpenDedupe SDFS. * @@ -125,8 +125,7 @@ private static void removeLock(String st) { l.unlock(); } } finally { - if (SDFSLogger.isDebug()) - SDFSLogger.getLog().debug("hmpa size=" + activeTasks.size()); + SDFSLogger.getLog().debug("hmpa size=" + activeTasks.size()); iLock.unlock(); } } @@ -216,7 +215,7 @@ public byte[] getFree() { /* * (non-Javadoc) - * + * * @see org.opendedup.collections.DataMap#iterInit() */ @Override @@ -237,7 +236,7 @@ private long getInternalIterFPos() { /* * (non-Javadoc) - * + * * @see org.opendedup.collections.DataMap#getIterPos() */ @Override @@ -258,7 +257,7 @@ public void setLogicalIterPos(long pos) throws IOException { /* * (non-Javadoc) - * + * * @see org.opendedup.collections.DataMap#nextKey() */ @Override @@ -281,9 +280,8 @@ public long nextKey() throws IOException, FileClosedException { return pos; } } catch (Exception e1) { - if (SDFSLogger.isDebug()) - SDFSLogger.getLog().debug("unable to iterate through key at " + iterPos.get() * arrayLength, - e1); + SDFSLogger.getLog().debug("unable to iterate through key at " + iterPos.get() * arrayLength, + e1); } finally { iterPos.incrementAndGet(); _cpos = getInternalIterFPos(); @@ -301,7 +299,7 @@ public long nextKey() throws IOException, FileClosedException { /* * (non-Javadoc) - * + * * @see org.opendedup.collections.DataMap#nextValue() */ byte[][] nbufs = null; @@ -338,7 +336,7 @@ public SparseDataChunk nextValue(boolean index) throws IOException, FileClosedEx if (index) { for (HashLocPair p : ck.getFingers().values()) { long v = DedupFileStore.addRef(p.hash, Longs.fromByteArray(p.hashloc), 1); - if(v != -1) + if (v != -1) p.hashloc = Longs.toByteArray(v); } } @@ -357,7 +355,7 @@ public SparseDataChunk nextValue(boolean index) throws IOException, FileClosedEx } - public void setIndexed(boolean indexed) throws IOException{ + public void setIndexed(boolean indexed) throws IOException { FileChannel bdb = (FileChannel) Files.newByteChannel(bdbf, StandardOpenOption.CREATE, StandardOpenOption.WRITE, StandardOpenOption.READ, StandardOpenOption.SPARSE); if (version > 0) { @@ -366,7 +364,7 @@ public void setIndexed(boolean indexed) throws IOException{ ByteBuffer buf = ByteBuffer.allocate(4); buf.putShort(magicnumber); buf.put(this.version); - if(indexed) { + if (indexed) { buf.put((byte) 1); } else { buf.put((byte) 0); @@ -384,7 +382,6 @@ public boolean isIndexed() { return this.indexed; } - public LongKeyValue nextKeyValue(boolean index) throws IOException, FileClosedException { ReadLock l = this.hashlock.readLock(); l.lock(); @@ -405,7 +402,7 @@ public LongKeyValue nextKeyValue(boolean index) throws IOException, FileClosedEx for (HashLocPair p : ck.getFingers().values()) { long archiveId = Longs.fromByteArray(p.hashloc); long v = DedupFileStore.addRef(p.hash, Longs.fromByteArray(p.hashloc), 1); - if(v != -1 && archiveId != v) + if (v != -1 && archiveId != v) p.hashloc = Longs.toByteArray(v); } @@ -426,7 +423,7 @@ public LongKeyValue nextKeyValue(boolean index) throws IOException, FileClosedEx /* * (non-Javadoc) - * + * * @see org.opendedup.collections.DataMap#isClosed() */ @Override @@ -479,8 +476,7 @@ private void openFile() throws IOException { dbFile = new File(filePath); boolean fileExists = dbFile.exists(); - if (SDFSLogger.isDebug()) - SDFSLogger.getLog().debug("opening [" + this.filePath + "]"); + SDFSLogger.getLog().debug("opening [" + this.filePath + "]"); if (!fileExists) { if (!dbFile.getParentFile().exists()) { dbFile.getParentFile().mkdirs(); @@ -544,7 +540,7 @@ private long getMapFilePosition(long pos) throws IOException { /* * (non-Javadoc) - * + * * @see org.opendedup.collections.DataMap#put(long, byte[]) */ @Override @@ -592,7 +588,7 @@ public void putIfNull(long pos, SparseDataChunk data) throws IOException, FileCl /* * (non-Javadoc) - * + * * @see org.opendedup.collections.DataMap#trim(long, int) */ @Override @@ -608,8 +604,7 @@ public synchronized void trim(long pos, int len) throws FileClosedException { if (es <= ls) return; else { - if (SDFSLogger.isDebug()) - SDFSLogger.getLog().debug("will trim from " + ls + " to " + es); + SDFSLogger.getLog().debug("will trim from " + ls + " to " + es); FileChannel _bdb = null; ByteBuffer buff = ByteBuffer.wrap(this.FREE); try { @@ -634,8 +629,7 @@ public synchronized void trim(long pos, int len) throws FileClosedException { _bdb.position(_pos); _bdb.write(buff); } - if (SDFSLogger.isDebug()) - SDFSLogger.getLog().debug("trimed from " + ls + " to " + _bdb.position()); + SDFSLogger.getLog().debug("trimed from " + ls + " to " + _bdb.position()); } catch (Exception e) { @@ -655,7 +649,7 @@ public synchronized void trim(long pos, int len) throws FileClosedException { /* * (non-Javadoc) - * + * * @see org.opendedup.collections.DataMap#truncate(long) */ @Override @@ -695,12 +689,12 @@ public void truncate(long length) throws IOException { /* * (non-Javadoc) - * + * * @see com.annesam.collections.AbstractMap#remove(long) */ /* * (non-Javadoc) - * + * * @see org.opendedup.collections.DataMap#remove(long) */ @Override @@ -735,12 +729,12 @@ public void remove(long pos) throws IOException, FileClosedException { /* * (non-Javadoc) - * + * * @see com.annesam.collections.AbstractMap#get(long) */ /* * (non-Javadoc) - * + * * @see org.opendedup.collections.DataMap#get(long) */ @Override @@ -786,7 +780,7 @@ public SparseDataChunk get(long pos) throws IOException, FileClosedException { /* * (non-Javadoc) - * + * * @see org.opendedup.collections.DataMap#sync() */ @Override @@ -803,20 +797,20 @@ public void sync() throws IOException { * FileChannel _bdb = null; try { _bdb = (FileChannel) * bdbf.newByteChannel(StandardOpenOption.WRITE, StandardOpenOption.READ, * StandardOpenOption.SPARSE); _bdb.force(true); } catch (IOException e) { - * + * * } finally { try { _bdb.close(); } catch (Exception e) { } } */ } /* * (non-Javadoc) - * + * * @see com.annesam.collections.AbstractMap#vanish() */ /* * (non-Javadoc) - * + * * @see org.opendedup.collections.DataMap#vanish() */ @Override @@ -825,33 +819,37 @@ public void vanish(boolean index) throws IOException { l.lock(); try { AtomicLong rmct = new AtomicLong(); - if(!this.indexed) { - - SDFSLogger.getLog().debug("Not dereferencing " + this.filePath); + AtomicLong dct = new AtomicLong(); + if (!this.indexed) { + + SDFSLogger.getLog().info("Not dereferencing " + this.filePath); } if (index && this.indexed) { - File f = new File(this.dbFile.getParentFile(),"cpos.txt"); + File f = new File(this.dbFile.getParentFile(), "cpos.txt"); RandomAccessFile raf = null; long ip = 0; - if(f.exists()) { + if (f.exists()) { raf = new RandomAccessFile(f, "rw"); raf.seek(0); ip = raf.readLong(); } else { raf = new RandomAccessFile(f, "rw"); } - + this.iterPos.set(ip); raf.seek(0); raf.writeLong(ip); - + SparseDataChunk ck = this.nextValue(false); while (ck != null) { for (HashLocPair p : ck.getFingers().values()) { long rm = DedupFileStore.removeRef(p.hash, Longs.fromByteArray(p.hashloc), 1); + if (rm == -1) { rmct.incrementAndGet(); + } else { + dct.incrementAndGet(); } } raf.seek(0); @@ -863,7 +861,7 @@ public void vanish(boolean index) throws IOException { } if (!this.isClosed()) this.forceClose(); - + File f = new File(this.filePath); f.delete(); File cf = new File(this.filePath + ".lz4"); @@ -874,6 +872,7 @@ public void vanish(boolean index) throws IOException { if (rmct.get() > 0) { SDFSLogger.getLog().warn("unable to remove orphaned reference total=" + rmct.get()); } + SDFSLogger.getLog().debug("decremented " + dct.get() + " for " + this.filePath); } catch (Exception e) { throw new IOException(e); @@ -892,7 +891,7 @@ public void index() throws IOException, FileClosedException { /* * (non-Javadoc) - * + * * @see org.opendedup.collections.DataMap#copy(java.lang.String) */ @Override @@ -902,11 +901,11 @@ public void copy(String destFilePath, boolean index) throws IOException { FileChannel srcC = null; FileChannel dstC = null; try { - try{ - this.sync(); - }catch(Exception e) {} - if (SDFSLogger.isDebug()) - SDFSLogger.getLog().debug("copying to " + destFilePath); + try { + this.sync(); + } catch (Exception e) { + } + SDFSLogger.getLog().debug("copying to " + destFilePath); File dest = new File(destFilePath); File src = new File(this.filePath); if (dest.exists()) @@ -920,8 +919,7 @@ public void copy(String destFilePath, boolean index) throws IOException { StandardOpenOption.WRITE, StandardOpenOption.SPARSE); srcC.transferTo(0, src.length(), dstC); } else { - if (SDFSLogger.isDebug()) - SDFSLogger.getLog().debug("snapping on unix/linux volume"); + SDFSLogger.getLog().debug("snapping on unix/linux volume"); String cpCmd = "cp --sparse=always --reflink=auto " + src.getPath() + " " + dest.getPath(); SDFSLogger.getLog().debug(cpCmd); Process p = Runtime.getRuntime().exec(cpCmd); @@ -930,8 +928,7 @@ public void copy(String destFilePath, boolean index) throws IOException { throw new IOException("unable to copy " + src.getPath() + " to " + dest.getPath() + " exit value was " + exitValue); } - if (SDFSLogger.isDebug()) - SDFSLogger.getLog().debug("copy exit value is " + p.waitFor()); + SDFSLogger.getLog().debug("copy exit value is " + p.waitFor()); } if (index) { LongByteArrayMap m = new LongByteArrayMap(dest.getPath()); @@ -940,8 +937,7 @@ public void copy(String destFilePath, boolean index) throws IOException { } else if (Main.COMPRESS_METADATA) { CompressionUtils.compressFile(dest, new File(dest.getPath() + ".lz4")); } - if (SDFSLogger.isDebug()) - SDFSLogger.getLog().debug("snapped map to [" + dest.getPath() + "]"); + SDFSLogger.getLog().debug("snapped map to [" + dest.getPath() + "]"); } catch (Exception e) { throw new IOException(e); } finally { @@ -959,7 +955,7 @@ public void copy(String destFilePath, boolean index) throws IOException { /* * (non-Javadoc) - * + * * @see org.opendedup.collections.DataMap#size() */ @Override @@ -976,7 +972,7 @@ public long size() { /* * (non-Javadoc) - * + * * @see org.opendedup.collections.DataMap#close() */ @Override @@ -1005,7 +1001,7 @@ public void close() throws IOException { } catch (Exception e) { } if (Main.COMPRESS_METADATA) { - + File df = new File(this.filePath); File cf = new File(this.filePath + ".lz4"); SDFSLogger.getLog().debug("will compress " + df.getPath() + " to " + cf.getPath()); @@ -1018,7 +1014,7 @@ public void close() throws IOException { SDFSLogger.getLog().debug("compressing " + df.getPath() + " to " + cf.getPath()); CompressionUtils.compressFile(df, cf); df.delete(); - SDFSLogger.getLog().debug("compressed "+ cf.getPath()); + SDFSLogger.getLog().debug("compressed " + cf.getPath()); } } mp.remove(this.filePath); @@ -1061,14 +1057,14 @@ public void put(long pos, SparseDataChunk data, int length) throws IOException { * _ck = new SparseDataChunk(ck.getDoop(), ck.getHash(), ck.isLocalData(), * ck.getHashLoc(),m.version); long fpose = (map.getIterPos() /map.arrayLength)* * Main.CHUNK_LENGTH; m.put(fpose, _ck.getBytes()); val = map.nextValue(); - * + * * } m.close(); map.close(); of.delete(); Files.move(nf.toPath(), of.toPath()); * m = new LongByteArrayMap(of.getPath(),(byte)1); * evt.endEvent("Complete migration."); } catch(IOException e) { * evt.endEvent("Unable to complete migration because : " +e.getMessage(), * SDFSEvent.ERROR); throw e; } finally { try { m.close(); }catch(Exception e) { * SDFSLogger.getLog().debug("unable to close map file", e); } - * + * * nf.delete(); map.hashlock.unlock(); } return m; } */ } diff --git a/src/org/opendedup/collections/RocksDBMap.java b/src/org/opendedup/collections/RocksDBMap.java index 14c77f032..6f82f20ed 100644 --- a/src/org/opendedup/collections/RocksDBMap.java +++ b/src/org/opendedup/collections/RocksDBMap.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com + * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com * * This file is part of OpenDedupe SDFS. * @@ -38,7 +38,6 @@ import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; -import org.apache.commons.io.FileUtils; import org.opendedup.logging.SDFSLogger; import org.opendedup.sdfs.Main; import org.opendedup.sdfs.filestore.ChunkData; @@ -95,6 +94,11 @@ public class RocksDBMap implements AbstractMap, AbstractHashesMap { FlushOptions flo = null; private ConcurrentHashMap tempHt = new ConcurrentHashMap( 1024, 0.75f, Main.writeThreads); + private AtomicLong rmct = new AtomicLong(); + private AtomicLong nrmct = new AtomicLong(); + private AtomicLong trmct = new AtomicLong(); + private AtomicLong tnrmct = new AtomicLong(); + //private AtomicLong szct = new AtomicLong(); static { RocksDB.loadLibrary(); @@ -214,7 +218,7 @@ public void init(long maxSize, String fileName, double fpp) throws IOException, options.setMaxBytesForLevelBase(fsize * 5); options.setTargetFileSizeBase(fsize); - //blockConfig.setIndexType(IndexType.kTwoLevelIndexSearch); + // blockConfig.setIndexType(IndexType.kTwoLevelIndexSearch); blockConfig.setFormatVersion(version); if (version == 4) { blockConfig.setIndexType(IndexType.kBinarySearch); @@ -232,7 +236,7 @@ public void init(long maxSize, String fileName, double fpp) throws IOException, // options.setAllowMmapWrites(true); // options.setAllowMmapReads(true); - //options.setTargetFileSizeBase(512 * 1024 * 1024); + // options.setTargetFileSizeBase(512 * 1024 * 1024); f.mkdirs(); StartShard sh = new StartShard(i, this.dbs, options, f, bar, ct); executor.execute(sh); @@ -399,10 +403,12 @@ public long claimKey(byte[] hash, long val, long ct) throws IOException { bk.putLong(System.currentTimeMillis() + Main.HT_RM_THRESH); rmdb.put(this.rmdbHsAr, wo, key, bk.array()); this.tempHt.remove(new ByteArrayWrapper(hash), bk); + trmct.incrementAndGet(); } else { if (rmdb.get(this.rmdbHsAr, key) != null) { - rmdb.delete(this.rmdbHsAr, key); + rmct.decrementAndGet(); + trmct.decrementAndGet(); } bk.putLong(8, ct); bk.position(0); @@ -428,16 +434,21 @@ public long claimKey(byte[] hash, long val, long ct) throws IOException { _rbk.putLong(System.currentTimeMillis() + Main.HT_RM_THRESH); rmdb.put(this.rmdbHsAr, key, _rbk.array()); getDB(hash).delete(hash); + rmct.incrementAndGet(); + //this.szct.decrementAndGet(); } else { if (rmdb.get(this.rmdbHsAr, key) != null) { rmdb.delete(this.rmdbHsAr, key); + rmct.decrementAndGet(); } if (v.length >= 24) { bk.putLong(v.length - 16, ct); } else { bk.putLong(v.length - 8, ct); } + nrmct.incrementAndGet(); getDB(hash).put(wo, hash, v); + //this.szct.incrementAndGet(); } return oval; } else { @@ -462,13 +473,16 @@ public long claimKey(byte[] hash, long val, long ct) throws IOException { byte[] _val = _bf.array(); if (_val.length == 0) { this.armdb.delete(this.armdbHsAr, hash); + } else { this.armdb.put(this.armdbHsAr, hash, _val); } + //this.abdt.decrementAndGet(); } else { if (rmdb.get(this.rmdbHsAr, key) != null) { rmdb.delete(this.rmdbHsAr, key); + rmct.decrementAndGet(); } this.setArRefs(bk, val, ct); this.armdb.put(this.armdbHsAr, hash, bk.array()); @@ -576,31 +590,35 @@ public boolean isClosed() { @Override public long getSize() { - try { - long sz = 0; - for (RocksDB db : dbs) { - sz += db.getLongProperty("rocksdb.estimate-num-keys"); - } - return sz; - } catch (RocksDBException e) { - SDFSLogger.getLog().error("unable to get lenght for rocksdb", e); - return 0; - } + + try { + long sz = 0; + for (RocksDB db : dbs) { + sz += db.getLongProperty("rocksdb.estimate-num-keys"); + } + sz +=this.tempHt.size(); + return sz; + } catch (RocksDBException e) { + SDFSLogger.getLog().error("unable to get lenght for rocksdb", e); + return 0; + } } @Override public long getUsedSize() { - - try { - long sz = 0; - for (RocksDB db : dbs) { - sz += db.getLongProperty("rocksdb.estimate-num-keys"); - } - return sz * Main.CHUNK_LENGTH; - } catch (RocksDBException e) { - SDFSLogger.getLog().error("unable to get lenght for rocksdb", e); - return 0; - } + //return this.szct.get(); + + try { + long sz = 0; + for (RocksDB db : dbs) { + sz += db.getLongProperty("rocksdb.estimate-num-keys"); + } + return sz + tempHt.size(); + } catch (RocksDBException e) { + SDFSLogger.getLog().error("unable to get lenght for rocksdb", e); + return 0; + } + } @Override @@ -617,7 +635,12 @@ public synchronized long claimRecords(SDFSEvent evt, boolean compact) throws IOE long ndct = 0; try { RocksIterator iter = rmdb.newIterator(this.rmdbHsAr); - SDFSLogger.getLog().info("Removing hashes "); + SDFSLogger.getLog().info("Removing hashes rmct=" + rmct.get() + + " nrmct=" + nrmct.get() + " trmct=" + trmct.get() + " tnrmct=" + tnrmct); + rmct.set(0); + nrmct.set(0); + trmct.set(0); + tnrmct.set(0); ByteBuffer bk = ByteBuffer.allocateDirect(24); for (iter.seekToFirst(); iter.isValid(); iter.next()) { @@ -669,7 +692,8 @@ public synchronized long claimRecords(SDFSEvent evt, boolean compact) throws IOE } } - SDFSLogger.getLog().info("Checked [" + hct + "] removed [" + dct + "] reclaimed [" + ndct + "]"); + SDFSLogger.getLog() + .info("Checked [" + hct + "] removed [" + dct + "] reclaimed [" + ndct + "]"); if (compact) { SDFSLogger.getLog().info("compacting archives"); int i = 0; @@ -703,7 +727,7 @@ public void setMaxSize(long maxSz) throws IOException { /** * initializes the Object set of this hash table. - * + * * @param initialCapacity an int value * @return an int value * @throws HashtableFullException @@ -727,7 +751,7 @@ public long endStartingPosition() { /** * Searches the set for obj - * + * * @param obj an Object value * @return a boolean value * @throws IOException @@ -782,7 +806,7 @@ public InsertRecord put(ChunkData cm, boolean persist) throws IOException, Hasht bk.putLong(8, ct); this.tempHt.put(new ByteArrayWrapper(cm.getHash()), bk); cm.setcPos(pos); - return new InsertRecord(false, pos); + return new InsertRecord(false, pos,0); } } finally { l.unlock(); @@ -800,8 +824,9 @@ public InsertRecord put(ChunkData cm, boolean persist) throws IOException, Hasht v = db.get(cm.getHash()); if (v == null) { + int writtenLen = 0; try { - cm.persistData(true); + writtenLen = cm.persistData(true).getCompressedLength(); } catch (org.opendedup.collections.HashExistsException e) { cm.setcPos(e.getPos()); } @@ -821,7 +846,7 @@ public InsertRecord put(ChunkData cm, boolean persist) throws IOException, Hasht bk.putLong(8, ct); cm.setcPos(pos); this.tempHt.put(new ByteArrayWrapper(cm.getHash()), bk); - return new InsertRecord(false, pos); + return new InsertRecord(false, pos,0); } else if (db.get(cm.getHash()) != null) { return this.put(cm, true); } else { @@ -834,7 +859,7 @@ public InsertRecord put(ChunkData cm, boolean persist) throws IOException, Hasht bf.putLong(cm.references); this.tempHt.put(new ByteArrayWrapper(cm.getHash()), bf); // this.rmdb.delete(cm.getHash()); - return new InsertRecord(true, cm.getcPos()); + return new InsertRecord(true, cm.getcPos(),writtenLen); } } } finally { @@ -853,11 +878,15 @@ public InsertRecord put(ChunkData cm, boolean persist) throws IOException, Hasht byte[] arVal = armdb.get(this.armdbHsAr, cm.getHash()); if (arVal == null) { armdb.put(this.armdbHsAr, cm.getHash(), v); + } else { ByteBuffer _nbf = this.addArRef(ByteBuffer.wrap(arVal), v); armdb.put(this.armdbHsAr, cm.getHash(), _nbf.array()); } + //abdt.incrementAndGet(); + this.getDB(cm.getHash()).delete(cm.getHash()); + //this.szct.decrementAndGet(); return this.put(cm, persist); } } @@ -869,7 +898,7 @@ public InsertRecord put(ChunkData cm, boolean persist) throws IOException, Hasht cm.setcPos(pos); bk.putLong(8, ct); db.put(wo, cm.getHash(), v); - return new InsertRecord(false, pos); + return new InsertRecord(false, pos,0); } finally { l.unlock(); } @@ -881,7 +910,7 @@ public InsertRecord put(ChunkData cm, boolean persist) throws IOException, Hasht /* * (non-Javadoc) - * + * * @see org.opendedup.collections.AbstractHashesMap#update(org.opendedup.sdfs * .filestore.ChunkData) */ @@ -917,6 +946,8 @@ public boolean isClaimed(ChunkData cm) throws KeyNotFoundException, IOException throw new IOException("not implemented"); } + //AtomicLong abdt = new AtomicLong(); + @Override public long get(byte[] key) throws IOException { // SDFSLogger.getLog().info("key length is " + key.length); @@ -938,15 +969,20 @@ public long get(byte[] key) throws IOException { long pos = bk.getLong(); if (v.length >= 24 && Main.maxAge > -1) { long age = bk.getLong(16); + bk.getLong(); if (age + Main.maxAge < System.currentTimeMillis()) { byte[] arVal = armdb.get(this.armdbHsAr, key); if (arVal == null) { armdb.put(this.armdbHsAr, key, v); + } else { ByteBuffer _nbf = this.addArRef(ByteBuffer.wrap(arVal), v); armdb.put(this.armdbHsAr, key, _nbf.array()); } + //abdt.incrementAndGet(); this.getDB(key).delete(key); + //this.szct.decrementAndGet(); + return this.get(key); } } @@ -1053,8 +1089,9 @@ public void close() { this.syncLock.lock(); try { this.closed = true; - //CommandLineProgressBar bar = new CommandLineProgressBar("Closing Hash Tables", dbs.length + 2, System.out); - //int i = 0; + // CommandLineProgressBar bar = new CommandLineProgressBar("Closing Hash + // Tables", dbs.length + 2, System.out); + // int i = 0; for (RocksDB db : dbs) { try { @@ -1065,24 +1102,24 @@ public void close() { } catch (Exception e) { SDFSLogger.getLog().warn("While closing hashtable ", e); } - //bar.update(i); - //i++; + // bar.update(i); + // i++; } try { this.rmdb.flush(new FlushOptions()); } catch (Exception e) { SDFSLogger.getLog().warn("While closing hashtable ", e); } - //bar.update(i); - //i++; + // bar.update(i); + // i++; try { this.armdb.flush(new FlushOptions(), this.armdbHsAr); } catch (Exception e) { SDFSLogger.getLog().warn("While closing hashtable ", e); } - //bar.update(i); - //i++; - //bar.finish(); + // bar.update(i); + // i++; + // bar.finish(); } finally { this.syncLock.unlock(); @@ -1124,7 +1161,7 @@ public void commitCompact(boolean force) throws IOException { @Override public void rollbackCompact() throws IOException { - //FileUtils.deleteDirectory(new File(this.fileName)); + // FileUtils.deleteDirectory(new File(this.fileName)); } @@ -1222,6 +1259,7 @@ public void run() { valb.put(bf.array()); valb.putLong(System.currentTimeMillis()); db.put(m.owo, b, valb.array()); + //m.szct.incrementAndGet(); } m.tempHt.remove(new ByteArrayWrapper(b)); } catch (Exception e) { diff --git a/src/org/opendedup/collections/SimpleByteArrayLongMap.java b/src/org/opendedup/collections/SimpleByteArrayLongMap.java index c1a1c1422..d2f05850a 100644 --- a/src/org/opendedup/collections/SimpleByteArrayLongMap.java +++ b/src/org/opendedup/collections/SimpleByteArrayLongMap.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com + * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com * * This file is part of OpenDedupe SDFS. * @@ -72,7 +72,7 @@ public SimpleByteArrayLongMap(String path, int sz, int ver) throws IOException { /* * (non-Javadoc) - * + * * @see org.opendedup.collections.SimpleMapInterface#getVersion() */ @Override @@ -82,7 +82,7 @@ public int getVersion() { /* * (non-Javadoc) - * + * * @see org.opendedup.collections.SimpleMapInterface#getPath() */ @Override @@ -95,7 +95,7 @@ public String getPath() { /* * (non-Javadoc) - * + * * @see org.opendedup.collections.SimpleMapInterface#iterInit() */ @Override @@ -113,7 +113,7 @@ public void iterInit() { /* * (non-Javadoc) - * + * * @see org.opendedup.collections.SimpleMapInterface#getCurrentSize() */ @Override @@ -129,7 +129,7 @@ public int getCurrentSize() { /* * (non-Javadoc) - * + * * @see org.opendedup.collections.SimpleMapInterface#next() */ @Override @@ -176,7 +176,7 @@ public KeyValuePair next() throws IOException, MapClosedException { /* * (non-Javadoc) - * + * * @see org.opendedup.collections.SimpleMapInterface#getMaxSz() */ @Override @@ -190,7 +190,7 @@ public int getWMaxSz() { /** * initializes the Object set of this hash table. - * + * * @param initialCapacity an int value * @return an int value * @throws IOException @@ -207,6 +207,7 @@ public void setUp() throws IOException { mapped = new BitSet(size); } this.ct = counter.incrementAndGet(); + /* if (SDFSLogger.isDebug()) { try { throw new IOException("debug"); @@ -214,6 +215,7 @@ public void setUp() throws IOException { SDFSLogger.getLog().debug("Opening [" + this.path + "] ct=[" + this.ct + "]", e); } } + */ rf = new RandomAccessFile(path, "rw"); this.kFC = FileChannel.open(new File(path).toPath(), StandardOpenOption.CREATE, StandardOpenOption.WRITE, StandardOpenOption.SPARSE, StandardOpenOption.READ); @@ -293,7 +295,7 @@ public void setUp() throws IOException { /* * (non-Javadoc) - * + * * @see org.opendedup.collections.SimpleMapInterface#containsKey(byte[]) */ @Override @@ -330,7 +332,7 @@ public int hashFunc3(int hash) { /** * Locates the index of obj. - * + * * @param obj an Object value * @return the index of obj or -1 if it isn't in the set. * @throws IOException @@ -359,7 +361,7 @@ protected int index(byte[] key) throws IOException { /** * Locates the index of non-null obj. - * + * * @param obj target key, know to be non-null * @param index we start from * @param hash @@ -401,7 +403,7 @@ private int indexRehashed(byte[] key, int index, int hash, byte[] cur) throws IO /* * (non-Javadoc) - * + * * @see org.opendedup.collections.SimpleMapInterface#vanish() */ @Override @@ -446,7 +448,7 @@ protected int insertionIndex(byte[] key) throws IOException { /** * Looks for a slot using double hashing for a non-null key values and inserts * the value in the slot - * + * * @param key non-null key value * @param index natural index * @param hash @@ -500,7 +502,7 @@ private int insertKeyRehash(byte[] key, int index, int hash, byte[] cur) throws /* * (non-Javadoc) - * + * * @see org.opendedup.collections.SimpleMapInterface#put(byte[], long) */ @Override @@ -553,7 +555,7 @@ public boolean put(byte[] key, long value) throws MapClosedException { /* * (non-Javadoc) - * + * * @see org.opendedup.collections.SimpleMapInterface#get(byte[]) */ @Override @@ -598,7 +600,7 @@ public long get(byte[] key) throws MapClosedException { /* * (non-Javadoc) - * + * * @see org.opendedup.collections.SimpleMapInterface#close() */ @Override @@ -608,13 +610,13 @@ public void close() { try { if (!this.closed) { this.ct = counter.decrementAndGet(); - if (SDFSLogger.isDebug()) { + /* try { throw new IOException("debug"); } catch (Exception e) { SDFSLogger.getLog().debug("Closing [" + this.path + "] ct=[" + this.ct + "]", e); } - } + */ this.closed = true; try { this.kFC.close(); @@ -693,7 +695,7 @@ public static void main(String[] args) throws Exception { /* * (non-Javadoc) - * + * * @see org.opendedup.collections.SimpleMapInterface#sync() */ @Override diff --git a/src/org/opendedup/collections/SparseDataChunk.java b/src/org/opendedup/collections/SparseDataChunk.java index 4235e6e5c..bcf644d5c 100644 --- a/src/org/opendedup/collections/SparseDataChunk.java +++ b/src/org/opendedup/collections/SparseDataChunk.java @@ -44,6 +44,7 @@ public class SparseDataChunk { public static final int RECONSTRUCTED = 1; // 0001 private byte version = 0; private TreeMap ar = new TreeMap(); + private int compressedLength =0; public SparseDataChunk() { @@ -69,6 +70,7 @@ public SparseDataChunk(SparseDataChunkP pb) throws IOException { this.fpos = pb.getFpos(); this.len = pb.getLen(); this.prevdoop = pb.getPrevdoop(); + this.compressedLength = pb.getCompressedLength(); for(SparseDataFlags f : pb.getFlagsList()) { if(f == SparseDataFlags.RECONSTRUCTED) { this.flags = RECONSTRUCTED; @@ -87,10 +89,18 @@ public byte getVersion() { return this.version; } + public void setCompressedLength(int compressedLength) { + this.compressedLength = compressedLength; + } + + public int getCompressedLength() { + return this.compressedLength; + } + public SparseDataChunkP toProtoBuf() { SparseDataChunkP.Builder b = SparseDataChunkP.newBuilder(); b.setDoop(this.doop).setFpos(this.fpos).setLen(this.len).setPrevdoop(this.prevdoop) - .setVersion(this.version); + .setVersion(this.version).setCompressedLength(this.compressedLength); if(this.isRecontructed()) { b.setFlags(0, SparseDataFlags.RECONSTRUCTED); } diff --git a/src/org/opendedup/ec/ECIO.java b/src/org/opendedup/ec/ECIO.java deleted file mode 100644 index dd2fe55c4..000000000 --- a/src/org/opendedup/ec/ECIO.java +++ /dev/null @@ -1,172 +0,0 @@ -package org.opendedup.ec; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.nio.ByteBuffer; -import java.nio.channels.FileChannel; -import java.util.ArrayList; - -import org.apache.hadoop.io.erasurecode.ErasureCoderOptions; - -import org.apache.hadoop.io.erasurecode.rawcoder.NativeRSRawErasureCoderFactory; -import org.apache.hadoop.io.erasurecode.rawcoder.RSRawErasureCoderFactory; -import org.apache.hadoop.io.erasurecode.rawcoder.RawErasureDecoder; -import org.apache.hadoop.io.erasurecode.rawcoder.RawErasureEncoder; - -import com.google.common.hash.HashFunction; -import com.google.common.hash.Hashing; -import com.google.common.io.Files; - -public class ECIO { - private int dataBuffers; - private int parityBuffers; - private RawErasureEncoder encoder; - private RawErasureDecoder decoder; - private HashFunction hf = Hashing.sipHash24(); - - public static void main(String[] args) throws IOException { - ECIO ec = new ECIO(3, 2); - File [] fls =ec.encode(new File("c:/temp/pingme.txt"),new File("c:/temp/")); - fls[1]=null; - fls[3]=null; - ec.decode(fls, new File("c:/temp/test2.txt")); - - } - - public ECIO(int dataBuffers, int parityBuffers) { - this.dataBuffers = dataBuffers; - this.parityBuffers = parityBuffers; - ErasureCoderOptions coderOptions = new ErasureCoderOptions(dataBuffers, parityBuffers); - try { - encoder = new NativeRSRawErasureCoderFactory().createEncoder(coderOptions); - decoder = new NativeRSRawErasureCoderFactory().createDecoder(coderOptions); - - } catch (ExceptionInInitializerError e) { - encoder = new RSRawErasureCoderFactory().createEncoder(coderOptions); - decoder = new RSRawErasureCoderFactory().createDecoder(coderOptions); - } - } - - public ByteBuffer[] encode(byte[] data) throws IOException { - ByteBuffer bk = ByteBuffer.allocate(data.length + 8 + 4); - bk.putInt(data.length); - bk.putLong(hf.hashBytes(data).asLong()); - bk.put(data); - bk.position(0); - int bl = roundUp(bk.capacity(), this.dataBuffers); - byte[][] cks = new byte[this.dataBuffers][bl]; - byte[][] pb = new byte[this.parityBuffers][bl]; - for (int i = 0; i < cks.length; i++) { - if (bk.remaining() < cks[i].length) { - - bk.get(cks[i], 0, bk.remaining()); - } else { - bk.get(cks[i]); - } - } - encoder.encode(cks, pb); - ByteBuffer[] dBuffers = new ByteBuffer[this.dataBuffers + this.parityBuffers]; - for (int i = 0; i < this.dataBuffers; i++) { - dBuffers[i] = ByteBuffer.wrap(cks[i]); - } - for (int i = this.dataBuffers; i < dBuffers.length; i++) { - dBuffers[i] = ByteBuffer.wrap(pb[i - this.dataBuffers]); - } - return dBuffers; - } - - public File[] encode(File data,File destDir) throws IOException { - //System.out.println(data.length()); - byte[] fdata = Files.toByteArray(data); - ByteBuffer[] bk = encode(fdata); - File[] fls = new File[bk.length]; - for (int i = 0; i < bk.length; i++) { - File f = new File(destDir, data.getName() + "." + i); - @SuppressWarnings("resource") - FileChannel ch = new FileOutputStream(f, false).getChannel(); - bk[i].position(0); - ch.write(bk[i]); - ch.close(); - fls[i] = f; - } - return fls; - } - - public void decode(File[] input, File output) throws IOException { - ByteBuffer[] bf = new ByteBuffer[input.length]; - for (int i = 0; i < input.length; i++) { - File f = input[i]; - if(f !=null && f.exists() && f.length() > 0) { - byte[] data = Files.toByteArray(f); - bf[i] = ByteBuffer.wrap(data); - } else { - bf[i] = null; - } - //System.out.println(data.length + " " + f.length()); - } - byte[] b = this.decode(bf); - FileOutputStream out = new FileOutputStream(output, false); - out.write(b); - out.flush(); - out.close(); - } - - public byte[] decode(ByteBuffer[] data) throws IOException { - int dl = 0; - ArrayList missing = new ArrayList(); - for (int i = 0; i < this.dataBuffers; i++) { - ByteBuffer bk = data[i]; - if (bk == null) { - missing.add(i); - } - else if (bk.capacity() > dl) - dl = bk.capacity(); - } - if (missing.size() > 0) { - int[] pb = new int[missing.size()]; - - for (int i = 0; i < missing.size(); i++) { - pb[i] = missing.get(i); - } - ByteBuffer[] ob = new ByteBuffer[pb.length]; - for (int i = 0; i < pb.length; i++) { - ob[i] = ByteBuffer.allocate(dl); - } - this.decoder.decode(data, pb, ob); - for (int i = 0; i < pb.length; i++) { - data[pb[i]] = ob[i]; - } - } - //System.out.println(dl + " " + this.dataBuffers); - ByteBuffer _im = ByteBuffer.allocate(dl * this.dataBuffers); - for (int i = 0; i < this.dataBuffers; i++) { - ByteBuffer bk = data[i]; - bk.position(0); - _im.put(bk); - } - _im.position(0); - int sz = _im.getInt(); - long hv =_im.getLong(); - byte[] out = new byte[sz]; - //System.out.println(out.length); - - _im.get(out); - if(hf.hashBytes(out).asLong() != hv) - throw new IOException("Erasure decoding mismatch expected hv=" + hv + " actual hv=" + hf.hashBytes(out).asLong()); - return out; - } - - public static int roundUp(int num, int divisor) { - return (num + divisor - 1) / divisor; - } - - public int getDataBuffers() { - return this.dataBuffers; - } - - public int getParityBuffers() { - return this.parityBuffers; - } - -} diff --git a/src/org/opendedup/grpc/CloudFileInfo.java b/src/org/opendedup/grpc/CloudFileInfo.java index f549c57a0..608cfd100 100644 --- a/src/org/opendedup/grpc/CloudFileInfo.java +++ b/src/org/opendedup/grpc/CloudFileInfo.java @@ -57,6 +57,12 @@ java.lang.String getAttributesOrDefault( java.lang.String getAttributesOrThrow( java.lang.String key); + + /** + * int64 pvolumeID = 3; + * @return The pvolumeID. + */ + long getPvolumeID(); } /** * Protobuf type {@code org.opendedup.grpc.CloudMetaData} @@ -122,6 +128,11 @@ private CloudMetaData( attributes__.getKey(), attributes__.getValue()); break; } + case 24: { + + pvolumeID_ = input.readInt64(); + break; + } default: { if (!parseUnknownField( input, unknownFields, extensionRegistry, tag)) { @@ -258,6 +269,17 @@ public java.lang.String getAttributesOrThrow( return map.get(key); } + public static final int PVOLUMEID_FIELD_NUMBER = 3; + private long pvolumeID_; + /** + * int64 pvolumeID = 3; + * @return The pvolumeID. + */ + @java.lang.Override + public long getPvolumeID() { + return pvolumeID_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -281,6 +303,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) internalGetAttributes(), AttributesDefaultEntryHolder.defaultEntry, 2); + if (pvolumeID_ != 0L) { + output.writeInt64(3, pvolumeID_); + } unknownFields.writeTo(output); } @@ -304,6 +329,10 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream .computeMessageSize(2, attributes__); } + if (pvolumeID_ != 0L) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(3, pvolumeID_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -323,6 +352,8 @@ public boolean equals(final java.lang.Object obj) { != other.getDate()) return false; if (!internalGetAttributes().equals( other.internalGetAttributes())) return false; + if (getPvolumeID() + != other.getPvolumeID()) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -341,6 +372,9 @@ public int hashCode() { hash = (37 * hash) + ATTRIBUTES_FIELD_NUMBER; hash = (53 * hash) + internalGetAttributes().hashCode(); } + hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getPvolumeID()); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -499,6 +533,8 @@ public Builder clear() { date_ = 0L; internalGetMutableAttributes().clear(); + pvolumeID_ = 0L; + return this; } @@ -529,6 +565,7 @@ public org.opendedup.grpc.CloudFileInfo.CloudMetaData buildPartial() { result.date_ = date_; result.attributes_ = internalGetAttributes(); result.attributes_.makeImmutable(); + result.pvolumeID_ = pvolumeID_; onBuilt(); return result; } @@ -582,6 +619,9 @@ public Builder mergeFrom(org.opendedup.grpc.CloudFileInfo.CloudMetaData other) { } internalGetMutableAttributes().mergeFrom( other.internalGetAttributes()); + if (other.getPvolumeID() != 0L) { + setPvolumeID(other.getPvolumeID()); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -770,6 +810,37 @@ public Builder putAllAttributes( .putAll(values); return this; } + + private long pvolumeID_ ; + /** + * int64 pvolumeID = 3; + * @return The pvolumeID. + */ + @java.lang.Override + public long getPvolumeID() { + return pvolumeID_; + } + /** + * int64 pvolumeID = 3; + * @param value The pvolumeID to set. + * @return This builder for chaining. + */ + public Builder setPvolumeID(long value) { + + pvolumeID_ = value; + onChanged(); + return this; + } + /** + * int64 pvolumeID = 3; + * @return This builder for chaining. + */ + public Builder clearPvolumeID() { + + pvolumeID_ = 0L; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -843,12 +914,12 @@ public org.opendedup.grpc.CloudFileInfo.CloudMetaData getDefaultInstanceForType( static { java.lang.String[] descriptorData = { "\n\023CloudFileInfo.proto\022\022org.opendedup.grp" + - "c\"\227\001\n\rCloudMetaData\022\014\n\004date\030\001 \001(\003\022E\n\natt" + + "c\"\252\001\n\rCloudMetaData\022\014\n\004date\030\001 \001(\003\022E\n\natt" + "ributes\030\002 \003(\01321.org.opendedup.grpc.Cloud" + - "MetaData.AttributesEntry\0321\n\017AttributesEn" + - "try\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001B0Z.g" + - "ithub.com/opendedup/sdfs-client-go/sdfs/" + - ";sdfsb\006proto3" + "MetaData.AttributesEntry\022\021\n\tpvolumeID\030\003 " + + "\001(\003\0321\n\017AttributesEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005v" + + "alue\030\002 \001(\t:\0028\001B0Z.github.com/opendedup/s" + + "dfs-client-go/sdfs/;sdfsb\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor .internalBuildGeneratedFileFrom(descriptorData, @@ -859,7 +930,7 @@ public org.opendedup.grpc.CloudFileInfo.CloudMetaData getDefaultInstanceForType( internal_static_org_opendedup_grpc_CloudMetaData_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_org_opendedup_grpc_CloudMetaData_descriptor, - new java.lang.String[] { "Date", "Attributes", }); + new java.lang.String[] { "Date", "Attributes", "PvolumeID", }); internal_static_org_opendedup_grpc_CloudMetaData_AttributesEntry_descriptor = internal_static_org_opendedup_grpc_CloudMetaData_descriptor.getNestedTypes().get(0); internal_static_org_opendedup_grpc_CloudMetaData_AttributesEntry_fieldAccessorTable = new diff --git a/src/org/opendedup/grpc/EncryptionServiceGrpc.java b/src/org/opendedup/grpc/EncryptionServiceGrpc.java new file mode 100644 index 000000000..700d74488 --- /dev/null +++ b/src/org/opendedup/grpc/EncryptionServiceGrpc.java @@ -0,0 +1,436 @@ +package org.opendedup.grpc; + +import static io.grpc.MethodDescriptor.generateFullMethodName; +import static io.grpc.stub.ClientCalls.asyncBidiStreamingCall; +import static io.grpc.stub.ClientCalls.asyncClientStreamingCall; +import static io.grpc.stub.ClientCalls.asyncServerStreamingCall; +import static io.grpc.stub.ClientCalls.asyncUnaryCall; +import static io.grpc.stub.ClientCalls.blockingServerStreamingCall; +import static io.grpc.stub.ClientCalls.blockingUnaryCall; +import static io.grpc.stub.ClientCalls.futureUnaryCall; +import static io.grpc.stub.ServerCalls.asyncBidiStreamingCall; +import static io.grpc.stub.ServerCalls.asyncClientStreamingCall; +import static io.grpc.stub.ServerCalls.asyncServerStreamingCall; +import static io.grpc.stub.ServerCalls.asyncUnaryCall; +import static io.grpc.stub.ServerCalls.asyncUnimplementedStreamingCall; +import static io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall; + +/** + */ +@javax.annotation.Generated( + value = "by gRPC proto compiler (version 1.30.2)", + comments = "Source: EncryptionService.proto") +public final class EncryptionServiceGrpc { + + private EncryptionServiceGrpc() {} + + public static final String SERVICE_NAME = "org.opendedup.grpc.EncryptionService"; + + // Static method descriptors that strictly reflect the proto. + private static volatile io.grpc.MethodDescriptor getValidateCertificateMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "ValidateCertificate", + requestType = org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest.class, + responseType = org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor getValidateCertificateMethod() { + io.grpc.MethodDescriptor getValidateCertificateMethod; + if ((getValidateCertificateMethod = EncryptionServiceGrpc.getValidateCertificateMethod) == null) { + synchronized (EncryptionServiceGrpc.class) { + if ((getValidateCertificateMethod = EncryptionServiceGrpc.getValidateCertificateMethod) == null) { + EncryptionServiceGrpc.getValidateCertificateMethod = getValidateCertificateMethod = + io.grpc.MethodDescriptor.newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ValidateCertificate")) + .setSampledToLocalTracing(true) + .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest.getDefaultInstance())) + .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse.getDefaultInstance())) + .setSchemaDescriptor(new EncryptionServiceMethodDescriptorSupplier("ValidateCertificate")) + .build(); + } + } + } + return getValidateCertificateMethod; + } + + private static volatile io.grpc.MethodDescriptor getExportServerCertificateMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "ExportServerCertificate", + requestType = org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest.class, + responseType = org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor getExportServerCertificateMethod() { + io.grpc.MethodDescriptor getExportServerCertificateMethod; + if ((getExportServerCertificateMethod = EncryptionServiceGrpc.getExportServerCertificateMethod) == null) { + synchronized (EncryptionServiceGrpc.class) { + if ((getExportServerCertificateMethod = EncryptionServiceGrpc.getExportServerCertificateMethod) == null) { + EncryptionServiceGrpc.getExportServerCertificateMethod = getExportServerCertificateMethod = + io.grpc.MethodDescriptor.newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ExportServerCertificate")) + .setSampledToLocalTracing(true) + .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest.getDefaultInstance())) + .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse.getDefaultInstance())) + .setSchemaDescriptor(new EncryptionServiceMethodDescriptorSupplier("ExportServerCertificate")) + .build(); + } + } + } + return getExportServerCertificateMethod; + } + + private static volatile io.grpc.MethodDescriptor getDeleteExportedCertMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "DeleteExportedCert", + requestType = org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest.class, + responseType = org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor getDeleteExportedCertMethod() { + io.grpc.MethodDescriptor getDeleteExportedCertMethod; + if ((getDeleteExportedCertMethod = EncryptionServiceGrpc.getDeleteExportedCertMethod) == null) { + synchronized (EncryptionServiceGrpc.class) { + if ((getDeleteExportedCertMethod = EncryptionServiceGrpc.getDeleteExportedCertMethod) == null) { + EncryptionServiceGrpc.getDeleteExportedCertMethod = getDeleteExportedCertMethod = + io.grpc.MethodDescriptor.newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "DeleteExportedCert")) + .setSampledToLocalTracing(true) + .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest.getDefaultInstance())) + .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse.getDefaultInstance())) + .setSchemaDescriptor(new EncryptionServiceMethodDescriptorSupplier("DeleteExportedCert")) + .build(); + } + } + } + return getDeleteExportedCertMethod; + } + + /** + * Creates a new async stub that supports all call types for the service + */ + public static EncryptionServiceStub newStub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public EncryptionServiceStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new EncryptionServiceStub(channel, callOptions); + } + }; + return EncryptionServiceStub.newStub(factory, channel); + } + + /** + * Creates a new blocking-style stub that supports unary and streaming output calls on the service + */ + public static EncryptionServiceBlockingStub newBlockingStub( + io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public EncryptionServiceBlockingStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new EncryptionServiceBlockingStub(channel, callOptions); + } + }; + return EncryptionServiceBlockingStub.newStub(factory, channel); + } + + /** + * Creates a new ListenableFuture-style stub that supports unary calls on the service + */ + public static EncryptionServiceFutureStub newFutureStub( + io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public EncryptionServiceFutureStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new EncryptionServiceFutureStub(channel, callOptions); + } + }; + return EncryptionServiceFutureStub.newStub(factory, channel); + } + + /** + */ + public static abstract class EncryptionServiceImplBase implements io.grpc.BindableService { + + /** + */ + public void validateCertificate(org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest request, + io.grpc.stub.StreamObserver responseObserver) { + asyncUnimplementedUnaryCall(getValidateCertificateMethod(), responseObserver); + } + + /** + */ + public void exportServerCertificate(org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest request, + io.grpc.stub.StreamObserver responseObserver) { + asyncUnimplementedUnaryCall(getExportServerCertificateMethod(), responseObserver); + } + + /** + */ + public void deleteExportedCert(org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest request, + io.grpc.stub.StreamObserver responseObserver) { + asyncUnimplementedUnaryCall(getDeleteExportedCertMethod(), responseObserver); + } + + @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() { + return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor()) + .addMethod( + getValidateCertificateMethod(), + asyncUnaryCall( + new MethodHandlers< + org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest, + org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse>( + this, METHODID_VALIDATE_CERTIFICATE))) + .addMethod( + getExportServerCertificateMethod(), + asyncUnaryCall( + new MethodHandlers< + org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest, + org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse>( + this, METHODID_EXPORT_SERVER_CERTIFICATE))) + .addMethod( + getDeleteExportedCertMethod(), + asyncUnaryCall( + new MethodHandlers< + org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest, + org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse>( + this, METHODID_DELETE_EXPORTED_CERT))) + .build(); + } + } + + /** + */ + public static final class EncryptionServiceStub extends io.grpc.stub.AbstractAsyncStub { + private EncryptionServiceStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected EncryptionServiceStub build( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new EncryptionServiceStub(channel, callOptions); + } + + /** + */ + public void validateCertificate(org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest request, + io.grpc.stub.StreamObserver responseObserver) { + asyncUnaryCall( + getChannel().newCall(getValidateCertificateMethod(), getCallOptions()), request, responseObserver); + } + + /** + */ + public void exportServerCertificate(org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest request, + io.grpc.stub.StreamObserver responseObserver) { + asyncUnaryCall( + getChannel().newCall(getExportServerCertificateMethod(), getCallOptions()), request, responseObserver); + } + + /** + */ + public void deleteExportedCert(org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest request, + io.grpc.stub.StreamObserver responseObserver) { + asyncUnaryCall( + getChannel().newCall(getDeleteExportedCertMethod(), getCallOptions()), request, responseObserver); + } + } + + /** + */ + public static final class EncryptionServiceBlockingStub extends io.grpc.stub.AbstractBlockingStub { + private EncryptionServiceBlockingStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected EncryptionServiceBlockingStub build( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new EncryptionServiceBlockingStub(channel, callOptions); + } + + /** + */ + public org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse validateCertificate(org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest request) { + return blockingUnaryCall( + getChannel(), getValidateCertificateMethod(), getCallOptions(), request); + } + + /** + */ + public org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse exportServerCertificate(org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest request) { + return blockingUnaryCall( + getChannel(), getExportServerCertificateMethod(), getCallOptions(), request); + } + + /** + */ + public org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse deleteExportedCert(org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest request) { + return blockingUnaryCall( + getChannel(), getDeleteExportedCertMethod(), getCallOptions(), request); + } + } + + /** + */ + public static final class EncryptionServiceFutureStub extends io.grpc.stub.AbstractFutureStub { + private EncryptionServiceFutureStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected EncryptionServiceFutureStub build( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new EncryptionServiceFutureStub(channel, callOptions); + } + + /** + */ + public com.google.common.util.concurrent.ListenableFuture validateCertificate( + org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest request) { + return futureUnaryCall( + getChannel().newCall(getValidateCertificateMethod(), getCallOptions()), request); + } + + /** + */ + public com.google.common.util.concurrent.ListenableFuture exportServerCertificate( + org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest request) { + return futureUnaryCall( + getChannel().newCall(getExportServerCertificateMethod(), getCallOptions()), request); + } + + /** + */ + public com.google.common.util.concurrent.ListenableFuture deleteExportedCert( + org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest request) { + return futureUnaryCall( + getChannel().newCall(getDeleteExportedCertMethod(), getCallOptions()), request); + } + } + + private static final int METHODID_VALIDATE_CERTIFICATE = 0; + private static final int METHODID_EXPORT_SERVER_CERTIFICATE = 1; + private static final int METHODID_DELETE_EXPORTED_CERT = 2; + + private static final class MethodHandlers implements + io.grpc.stub.ServerCalls.UnaryMethod, + io.grpc.stub.ServerCalls.ServerStreamingMethod, + io.grpc.stub.ServerCalls.ClientStreamingMethod, + io.grpc.stub.ServerCalls.BidiStreamingMethod { + private final EncryptionServiceImplBase serviceImpl; + private final int methodId; + + MethodHandlers(EncryptionServiceImplBase serviceImpl, int methodId) { + this.serviceImpl = serviceImpl; + this.methodId = methodId; + } + + @java.lang.Override + @java.lang.SuppressWarnings("unchecked") + public void invoke(Req request, io.grpc.stub.StreamObserver responseObserver) { + switch (methodId) { + case METHODID_VALIDATE_CERTIFICATE: + serviceImpl.validateCertificate((org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_EXPORT_SERVER_CERTIFICATE: + serviceImpl.exportServerCertificate((org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_DELETE_EXPORTED_CERT: + serviceImpl.deleteExportedCert((org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + default: + throw new AssertionError(); + } + } + + @java.lang.Override + @java.lang.SuppressWarnings("unchecked") + public io.grpc.stub.StreamObserver invoke( + io.grpc.stub.StreamObserver responseObserver) { + switch (methodId) { + default: + throw new AssertionError(); + } + } + } + + private static abstract class EncryptionServiceBaseDescriptorSupplier + implements io.grpc.protobuf.ProtoFileDescriptorSupplier, io.grpc.protobuf.ProtoServiceDescriptorSupplier { + EncryptionServiceBaseDescriptorSupplier() {} + + @java.lang.Override + public com.google.protobuf.Descriptors.FileDescriptor getFileDescriptor() { + return org.opendedup.grpc.EncryptionServiceOuterClass.getDescriptor(); + } + + @java.lang.Override + public com.google.protobuf.Descriptors.ServiceDescriptor getServiceDescriptor() { + return getFileDescriptor().findServiceByName("EncryptionService"); + } + } + + private static final class EncryptionServiceFileDescriptorSupplier + extends EncryptionServiceBaseDescriptorSupplier { + EncryptionServiceFileDescriptorSupplier() {} + } + + private static final class EncryptionServiceMethodDescriptorSupplier + extends EncryptionServiceBaseDescriptorSupplier + implements io.grpc.protobuf.ProtoMethodDescriptorSupplier { + private final String methodName; + + EncryptionServiceMethodDescriptorSupplier(String methodName) { + this.methodName = methodName; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.MethodDescriptor getMethodDescriptor() { + return getServiceDescriptor().findMethodByName(methodName); + } + } + + private static volatile io.grpc.ServiceDescriptor serviceDescriptor; + + public static io.grpc.ServiceDescriptor getServiceDescriptor() { + io.grpc.ServiceDescriptor result = serviceDescriptor; + if (result == null) { + synchronized (EncryptionServiceGrpc.class) { + result = serviceDescriptor; + if (result == null) { + serviceDescriptor = result = io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME) + .setSchemaDescriptor(new EncryptionServiceFileDescriptorSupplier()) + .addMethod(getValidateCertificateMethod()) + .addMethod(getExportServerCertificateMethod()) + .addMethod(getDeleteExportedCertMethod()) + .build(); + } + } + } + return result; + } +} diff --git a/src/org/opendedup/grpc/EncryptionServiceOuterClass.java b/src/org/opendedup/grpc/EncryptionServiceOuterClass.java new file mode 100644 index 000000000..36d256725 --- /dev/null +++ b/src/org/opendedup/grpc/EncryptionServiceOuterClass.java @@ -0,0 +1,3782 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: EncryptionService.proto + +package org.opendedup.grpc; + +public final class EncryptionServiceOuterClass { + private EncryptionServiceOuterClass() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions( + (com.google.protobuf.ExtensionRegistryLite) registry); + } + public interface EncryptionKeyVerifyRequestOrBuilder extends + // @@protoc_insertion_point(interface_extends:org.opendedup.grpc.EncryptionKeyVerifyRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * string hash = 1; + * @return The hash. + */ + java.lang.String getHash(); + /** + * string hash = 1; + * @return The bytes for hash. + */ + com.google.protobuf.ByteString + getHashBytes(); + } + /** + *
+   * Request payload
+   * 
+ * + * Protobuf type {@code org.opendedup.grpc.EncryptionKeyVerifyRequest} + */ + public static final class EncryptionKeyVerifyRequest extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:org.opendedup.grpc.EncryptionKeyVerifyRequest) + EncryptionKeyVerifyRequestOrBuilder { + private static final long serialVersionUID = 0L; + // Use EncryptionKeyVerifyRequest.newBuilder() to construct. + private EncryptionKeyVerifyRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private EncryptionKeyVerifyRequest() { + hash_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new EncryptionKeyVerifyRequest(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private EncryptionKeyVerifyRequest( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + java.lang.String s = input.readStringRequireUtf8(); + + hash_ = s; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.opendedup.grpc.EncryptionServiceOuterClass.internal_static_org_opendedup_grpc_EncryptionKeyVerifyRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.opendedup.grpc.EncryptionServiceOuterClass.internal_static_org_opendedup_grpc_EncryptionKeyVerifyRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest.class, org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest.Builder.class); + } + + public static final int HASH_FIELD_NUMBER = 1; + private volatile java.lang.Object hash_; + /** + * string hash = 1; + * @return The hash. + */ + @java.lang.Override + public java.lang.String getHash() { + java.lang.Object ref = hash_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + hash_ = s; + return s; + } + } + /** + * string hash = 1; + * @return The bytes for hash. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getHashBytes() { + java.lang.Object ref = hash_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + hash_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!getHashBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, hash_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!getHashBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, hash_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest)) { + return super.equals(obj); + } + org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest other = (org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest) obj; + + if (!getHash() + .equals(other.getHash())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + HASH_FIELD_NUMBER; + hash = (53 * hash) + getHash().hashCode(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+     * Request payload
+     * 
+ * + * Protobuf type {@code org.opendedup.grpc.EncryptionKeyVerifyRequest} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:org.opendedup.grpc.EncryptionKeyVerifyRequest) + org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.opendedup.grpc.EncryptionServiceOuterClass.internal_static_org_opendedup_grpc_EncryptionKeyVerifyRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.opendedup.grpc.EncryptionServiceOuterClass.internal_static_org_opendedup_grpc_EncryptionKeyVerifyRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest.class, org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest.Builder.class); + } + + // Construct using org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + hash_ = ""; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.opendedup.grpc.EncryptionServiceOuterClass.internal_static_org_opendedup_grpc_EncryptionKeyVerifyRequest_descriptor; + } + + @java.lang.Override + public org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest getDefaultInstanceForType() { + return org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest.getDefaultInstance(); + } + + @java.lang.Override + public org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest build() { + org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest buildPartial() { + org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest result = new org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest(this); + result.hash_ = hash_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest) { + return mergeFrom((org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest other) { + if (other == org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest.getDefaultInstance()) return this; + if (!other.getHash().isEmpty()) { + hash_ = other.hash_; + onChanged(); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private java.lang.Object hash_ = ""; + /** + * string hash = 1; + * @return The hash. + */ + public java.lang.String getHash() { + java.lang.Object ref = hash_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + hash_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string hash = 1; + * @return The bytes for hash. + */ + public com.google.protobuf.ByteString + getHashBytes() { + java.lang.Object ref = hash_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + hash_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string hash = 1; + * @param value The hash to set. + * @return This builder for chaining. + */ + public Builder setHash( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + hash_ = value; + onChanged(); + return this; + } + /** + * string hash = 1; + * @return This builder for chaining. + */ + public Builder clearHash() { + + hash_ = getDefaultInstance().getHash(); + onChanged(); + return this; + } + /** + * string hash = 1; + * @param value The bytes for hash to set. + * @return This builder for chaining. + */ + public Builder setHashBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + hash_ = value; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:org.opendedup.grpc.EncryptionKeyVerifyRequest) + } + + // @@protoc_insertion_point(class_scope:org.opendedup.grpc.EncryptionKeyVerifyRequest) + private static final org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest(); + } + + public static org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public EncryptionKeyVerifyRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new EncryptionKeyVerifyRequest(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface EncryptionKeyVerifyResponseOrBuilder extends + // @@protoc_insertion_point(interface_extends:org.opendedup.grpc.EncryptionKeyVerifyResponse) + com.google.protobuf.MessageOrBuilder { + + /** + * bool accept = 1; + * @return The accept. + */ + boolean getAccept(); + + /** + * .org.opendedup.grpc.errorCodes errorCode = 2; + * @return The enum numeric value on the wire for errorCode. + */ + int getErrorCodeValue(); + /** + * .org.opendedup.grpc.errorCodes errorCode = 2; + * @return The errorCode. + */ + org.opendedup.grpc.FileInfo.errorCodes getErrorCode(); + + /** + * string error = 3; + * @return The error. + */ + java.lang.String getError(); + /** + * string error = 3; + * @return The bytes for error. + */ + com.google.protobuf.ByteString + getErrorBytes(); + } + /** + * Protobuf type {@code org.opendedup.grpc.EncryptionKeyVerifyResponse} + */ + public static final class EncryptionKeyVerifyResponse extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:org.opendedup.grpc.EncryptionKeyVerifyResponse) + EncryptionKeyVerifyResponseOrBuilder { + private static final long serialVersionUID = 0L; + // Use EncryptionKeyVerifyResponse.newBuilder() to construct. + private EncryptionKeyVerifyResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private EncryptionKeyVerifyResponse() { + errorCode_ = 0; + error_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new EncryptionKeyVerifyResponse(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private EncryptionKeyVerifyResponse( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + + accept_ = input.readBool(); + break; + } + case 16: { + int rawValue = input.readEnum(); + + errorCode_ = rawValue; + break; + } + case 26: { + java.lang.String s = input.readStringRequireUtf8(); + + error_ = s; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.opendedup.grpc.EncryptionServiceOuterClass.internal_static_org_opendedup_grpc_EncryptionKeyVerifyResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.opendedup.grpc.EncryptionServiceOuterClass.internal_static_org_opendedup_grpc_EncryptionKeyVerifyResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse.class, org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse.Builder.class); + } + + public static final int ACCEPT_FIELD_NUMBER = 1; + private boolean accept_; + /** + * bool accept = 1; + * @return The accept. + */ + @java.lang.Override + public boolean getAccept() { + return accept_; + } + + public static final int ERRORCODE_FIELD_NUMBER = 2; + private int errorCode_; + /** + * .org.opendedup.grpc.errorCodes errorCode = 2; + * @return The enum numeric value on the wire for errorCode. + */ + @java.lang.Override public int getErrorCodeValue() { + return errorCode_; + } + /** + * .org.opendedup.grpc.errorCodes errorCode = 2; + * @return The errorCode. + */ + @java.lang.Override public org.opendedup.grpc.FileInfo.errorCodes getErrorCode() { + @SuppressWarnings("deprecation") + org.opendedup.grpc.FileInfo.errorCodes result = org.opendedup.grpc.FileInfo.errorCodes.valueOf(errorCode_); + return result == null ? org.opendedup.grpc.FileInfo.errorCodes.UNRECOGNIZED : result; + } + + public static final int ERROR_FIELD_NUMBER = 3; + private volatile java.lang.Object error_; + /** + * string error = 3; + * @return The error. + */ + @java.lang.Override + public java.lang.String getError() { + java.lang.Object ref = error_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + error_ = s; + return s; + } + } + /** + * string error = 3; + * @return The bytes for error. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getErrorBytes() { + java.lang.Object ref = error_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + error_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (accept_ != false) { + output.writeBool(1, accept_); + } + if (errorCode_ != org.opendedup.grpc.FileInfo.errorCodes.NOERR.getNumber()) { + output.writeEnum(2, errorCode_); + } + if (!getErrorBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 3, error_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (accept_ != false) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(1, accept_); + } + if (errorCode_ != org.opendedup.grpc.FileInfo.errorCodes.NOERR.getNumber()) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(2, errorCode_); + } + if (!getErrorBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, error_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse)) { + return super.equals(obj); + } + org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse other = (org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse) obj; + + if (getAccept() + != other.getAccept()) return false; + if (errorCode_ != other.errorCode_) return false; + if (!getError() + .equals(other.getError())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + ACCEPT_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean( + getAccept()); + hash = (37 * hash) + ERRORCODE_FIELD_NUMBER; + hash = (53 * hash) + errorCode_; + hash = (37 * hash) + ERROR_FIELD_NUMBER; + hash = (53 * hash) + getError().hashCode(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code org.opendedup.grpc.EncryptionKeyVerifyResponse} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:org.opendedup.grpc.EncryptionKeyVerifyResponse) + org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.opendedup.grpc.EncryptionServiceOuterClass.internal_static_org_opendedup_grpc_EncryptionKeyVerifyResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.opendedup.grpc.EncryptionServiceOuterClass.internal_static_org_opendedup_grpc_EncryptionKeyVerifyResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse.class, org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse.Builder.class); + } + + // Construct using org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + accept_ = false; + + errorCode_ = 0; + + error_ = ""; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.opendedup.grpc.EncryptionServiceOuterClass.internal_static_org_opendedup_grpc_EncryptionKeyVerifyResponse_descriptor; + } + + @java.lang.Override + public org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse getDefaultInstanceForType() { + return org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse.getDefaultInstance(); + } + + @java.lang.Override + public org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse build() { + org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse buildPartial() { + org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse result = new org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse(this); + result.accept_ = accept_; + result.errorCode_ = errorCode_; + result.error_ = error_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse) { + return mergeFrom((org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse other) { + if (other == org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse.getDefaultInstance()) return this; + if (other.getAccept() != false) { + setAccept(other.getAccept()); + } + if (other.errorCode_ != 0) { + setErrorCodeValue(other.getErrorCodeValue()); + } + if (!other.getError().isEmpty()) { + error_ = other.error_; + onChanged(); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private boolean accept_ ; + /** + * bool accept = 1; + * @return The accept. + */ + @java.lang.Override + public boolean getAccept() { + return accept_; + } + /** + * bool accept = 1; + * @param value The accept to set. + * @return This builder for chaining. + */ + public Builder setAccept(boolean value) { + + accept_ = value; + onChanged(); + return this; + } + /** + * bool accept = 1; + * @return This builder for chaining. + */ + public Builder clearAccept() { + + accept_ = false; + onChanged(); + return this; + } + + private int errorCode_ = 0; + /** + * .org.opendedup.grpc.errorCodes errorCode = 2; + * @return The enum numeric value on the wire for errorCode. + */ + @java.lang.Override public int getErrorCodeValue() { + return errorCode_; + } + /** + * .org.opendedup.grpc.errorCodes errorCode = 2; + * @param value The enum numeric value on the wire for errorCode to set. + * @return This builder for chaining. + */ + public Builder setErrorCodeValue(int value) { + + errorCode_ = value; + onChanged(); + return this; + } + /** + * .org.opendedup.grpc.errorCodes errorCode = 2; + * @return The errorCode. + */ + @java.lang.Override + public org.opendedup.grpc.FileInfo.errorCodes getErrorCode() { + @SuppressWarnings("deprecation") + org.opendedup.grpc.FileInfo.errorCodes result = org.opendedup.grpc.FileInfo.errorCodes.valueOf(errorCode_); + return result == null ? org.opendedup.grpc.FileInfo.errorCodes.UNRECOGNIZED : result; + } + /** + * .org.opendedup.grpc.errorCodes errorCode = 2; + * @param value The errorCode to set. + * @return This builder for chaining. + */ + public Builder setErrorCode(org.opendedup.grpc.FileInfo.errorCodes value) { + if (value == null) { + throw new NullPointerException(); + } + + errorCode_ = value.getNumber(); + onChanged(); + return this; + } + /** + * .org.opendedup.grpc.errorCodes errorCode = 2; + * @return This builder for chaining. + */ + public Builder clearErrorCode() { + + errorCode_ = 0; + onChanged(); + return this; + } + + private java.lang.Object error_ = ""; + /** + * string error = 3; + * @return The error. + */ + public java.lang.String getError() { + java.lang.Object ref = error_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + error_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string error = 3; + * @return The bytes for error. + */ + public com.google.protobuf.ByteString + getErrorBytes() { + java.lang.Object ref = error_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + error_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string error = 3; + * @param value The error to set. + * @return This builder for chaining. + */ + public Builder setError( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + error_ = value; + onChanged(); + return this; + } + /** + * string error = 3; + * @return This builder for chaining. + */ + public Builder clearError() { + + error_ = getDefaultInstance().getError(); + onChanged(); + return this; + } + /** + * string error = 3; + * @param value The bytes for error to set. + * @return This builder for chaining. + */ + public Builder setErrorBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + error_ = value; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:org.opendedup.grpc.EncryptionKeyVerifyResponse) + } + + // @@protoc_insertion_point(class_scope:org.opendedup.grpc.EncryptionKeyVerifyResponse) + private static final org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse(); + } + + public static org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public EncryptionKeyVerifyResponse parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new EncryptionKeyVerifyResponse(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface ExportServerCertRequestOrBuilder extends + // @@protoc_insertion_point(interface_extends:org.opendedup.grpc.ExportServerCertRequest) + com.google.protobuf.MessageOrBuilder { + } + /** + * Protobuf type {@code org.opendedup.grpc.ExportServerCertRequest} + */ + public static final class ExportServerCertRequest extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:org.opendedup.grpc.ExportServerCertRequest) + ExportServerCertRequestOrBuilder { + private static final long serialVersionUID = 0L; + // Use ExportServerCertRequest.newBuilder() to construct. + private ExportServerCertRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ExportServerCertRequest() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new ExportServerCertRequest(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private ExportServerCertRequest( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.opendedup.grpc.EncryptionServiceOuterClass.internal_static_org_opendedup_grpc_ExportServerCertRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.opendedup.grpc.EncryptionServiceOuterClass.internal_static_org_opendedup_grpc_ExportServerCertRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest.class, org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest.Builder.class); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest)) { + return super.equals(obj); + } + org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest other = (org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest) obj; + + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code org.opendedup.grpc.ExportServerCertRequest} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:org.opendedup.grpc.ExportServerCertRequest) + org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.opendedup.grpc.EncryptionServiceOuterClass.internal_static_org_opendedup_grpc_ExportServerCertRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.opendedup.grpc.EncryptionServiceOuterClass.internal_static_org_opendedup_grpc_ExportServerCertRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest.class, org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest.Builder.class); + } + + // Construct using org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.opendedup.grpc.EncryptionServiceOuterClass.internal_static_org_opendedup_grpc_ExportServerCertRequest_descriptor; + } + + @java.lang.Override + public org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest getDefaultInstanceForType() { + return org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest.getDefaultInstance(); + } + + @java.lang.Override + public org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest build() { + org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest buildPartial() { + org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest result = new org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest(this); + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest) { + return mergeFrom((org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest other) { + if (other == org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest.getDefaultInstance()) return this; + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:org.opendedup.grpc.ExportServerCertRequest) + } + + // @@protoc_insertion_point(class_scope:org.opendedup.grpc.ExportServerCertRequest) + private static final org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest(); + } + + public static org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ExportServerCertRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new ExportServerCertRequest(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface ExportServerCertResponseOrBuilder extends + // @@protoc_insertion_point(interface_extends:org.opendedup.grpc.ExportServerCertResponse) + com.google.protobuf.MessageOrBuilder { + + /** + * bytes privateKey = 1; + * @return The privateKey. + */ + com.google.protobuf.ByteString getPrivateKey(); + + /** + * bytes certChain = 2; + * @return The certChain. + */ + com.google.protobuf.ByteString getCertChain(); + + /** + * .org.opendedup.grpc.errorCodes errorCode = 3; + * @return The enum numeric value on the wire for errorCode. + */ + int getErrorCodeValue(); + /** + * .org.opendedup.grpc.errorCodes errorCode = 3; + * @return The errorCode. + */ + org.opendedup.grpc.FileInfo.errorCodes getErrorCode(); + + /** + * string error = 4; + * @return The error. + */ + java.lang.String getError(); + /** + * string error = 4; + * @return The bytes for error. + */ + com.google.protobuf.ByteString + getErrorBytes(); + } + /** + * Protobuf type {@code org.opendedup.grpc.ExportServerCertResponse} + */ + public static final class ExportServerCertResponse extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:org.opendedup.grpc.ExportServerCertResponse) + ExportServerCertResponseOrBuilder { + private static final long serialVersionUID = 0L; + // Use ExportServerCertResponse.newBuilder() to construct. + private ExportServerCertResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ExportServerCertResponse() { + privateKey_ = com.google.protobuf.ByteString.EMPTY; + certChain_ = com.google.protobuf.ByteString.EMPTY; + errorCode_ = 0; + error_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new ExportServerCertResponse(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private ExportServerCertResponse( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + + privateKey_ = input.readBytes(); + break; + } + case 18: { + + certChain_ = input.readBytes(); + break; + } + case 24: { + int rawValue = input.readEnum(); + + errorCode_ = rawValue; + break; + } + case 34: { + java.lang.String s = input.readStringRequireUtf8(); + + error_ = s; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.opendedup.grpc.EncryptionServiceOuterClass.internal_static_org_opendedup_grpc_ExportServerCertResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.opendedup.grpc.EncryptionServiceOuterClass.internal_static_org_opendedup_grpc_ExportServerCertResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse.class, org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse.Builder.class); + } + + public static final int PRIVATEKEY_FIELD_NUMBER = 1; + private com.google.protobuf.ByteString privateKey_; + /** + * bytes privateKey = 1; + * @return The privateKey. + */ + @java.lang.Override + public com.google.protobuf.ByteString getPrivateKey() { + return privateKey_; + } + + public static final int CERTCHAIN_FIELD_NUMBER = 2; + private com.google.protobuf.ByteString certChain_; + /** + * bytes certChain = 2; + * @return The certChain. + */ + @java.lang.Override + public com.google.protobuf.ByteString getCertChain() { + return certChain_; + } + + public static final int ERRORCODE_FIELD_NUMBER = 3; + private int errorCode_; + /** + * .org.opendedup.grpc.errorCodes errorCode = 3; + * @return The enum numeric value on the wire for errorCode. + */ + @java.lang.Override public int getErrorCodeValue() { + return errorCode_; + } + /** + * .org.opendedup.grpc.errorCodes errorCode = 3; + * @return The errorCode. + */ + @java.lang.Override public org.opendedup.grpc.FileInfo.errorCodes getErrorCode() { + @SuppressWarnings("deprecation") + org.opendedup.grpc.FileInfo.errorCodes result = org.opendedup.grpc.FileInfo.errorCodes.valueOf(errorCode_); + return result == null ? org.opendedup.grpc.FileInfo.errorCodes.UNRECOGNIZED : result; + } + + public static final int ERROR_FIELD_NUMBER = 4; + private volatile java.lang.Object error_; + /** + * string error = 4; + * @return The error. + */ + @java.lang.Override + public java.lang.String getError() { + java.lang.Object ref = error_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + error_ = s; + return s; + } + } + /** + * string error = 4; + * @return The bytes for error. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getErrorBytes() { + java.lang.Object ref = error_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + error_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!privateKey_.isEmpty()) { + output.writeBytes(1, privateKey_); + } + if (!certChain_.isEmpty()) { + output.writeBytes(2, certChain_); + } + if (errorCode_ != org.opendedup.grpc.FileInfo.errorCodes.NOERR.getNumber()) { + output.writeEnum(3, errorCode_); + } + if (!getErrorBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 4, error_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!privateKey_.isEmpty()) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(1, privateKey_); + } + if (!certChain_.isEmpty()) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(2, certChain_); + } + if (errorCode_ != org.opendedup.grpc.FileInfo.errorCodes.NOERR.getNumber()) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(3, errorCode_); + } + if (!getErrorBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, error_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse)) { + return super.equals(obj); + } + org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse other = (org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse) obj; + + if (!getPrivateKey() + .equals(other.getPrivateKey())) return false; + if (!getCertChain() + .equals(other.getCertChain())) return false; + if (errorCode_ != other.errorCode_) return false; + if (!getError() + .equals(other.getError())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + PRIVATEKEY_FIELD_NUMBER; + hash = (53 * hash) + getPrivateKey().hashCode(); + hash = (37 * hash) + CERTCHAIN_FIELD_NUMBER; + hash = (53 * hash) + getCertChain().hashCode(); + hash = (37 * hash) + ERRORCODE_FIELD_NUMBER; + hash = (53 * hash) + errorCode_; + hash = (37 * hash) + ERROR_FIELD_NUMBER; + hash = (53 * hash) + getError().hashCode(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code org.opendedup.grpc.ExportServerCertResponse} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:org.opendedup.grpc.ExportServerCertResponse) + org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.opendedup.grpc.EncryptionServiceOuterClass.internal_static_org_opendedup_grpc_ExportServerCertResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.opendedup.grpc.EncryptionServiceOuterClass.internal_static_org_opendedup_grpc_ExportServerCertResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse.class, org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse.Builder.class); + } + + // Construct using org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + privateKey_ = com.google.protobuf.ByteString.EMPTY; + + certChain_ = com.google.protobuf.ByteString.EMPTY; + + errorCode_ = 0; + + error_ = ""; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.opendedup.grpc.EncryptionServiceOuterClass.internal_static_org_opendedup_grpc_ExportServerCertResponse_descriptor; + } + + @java.lang.Override + public org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse getDefaultInstanceForType() { + return org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse.getDefaultInstance(); + } + + @java.lang.Override + public org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse build() { + org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse buildPartial() { + org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse result = new org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse(this); + result.privateKey_ = privateKey_; + result.certChain_ = certChain_; + result.errorCode_ = errorCode_; + result.error_ = error_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse) { + return mergeFrom((org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse other) { + if (other == org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse.getDefaultInstance()) return this; + if (other.getPrivateKey() != com.google.protobuf.ByteString.EMPTY) { + setPrivateKey(other.getPrivateKey()); + } + if (other.getCertChain() != com.google.protobuf.ByteString.EMPTY) { + setCertChain(other.getCertChain()); + } + if (other.errorCode_ != 0) { + setErrorCodeValue(other.getErrorCodeValue()); + } + if (!other.getError().isEmpty()) { + error_ = other.error_; + onChanged(); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private com.google.protobuf.ByteString privateKey_ = com.google.protobuf.ByteString.EMPTY; + /** + * bytes privateKey = 1; + * @return The privateKey. + */ + @java.lang.Override + public com.google.protobuf.ByteString getPrivateKey() { + return privateKey_; + } + /** + * bytes privateKey = 1; + * @param value The privateKey to set. + * @return This builder for chaining. + */ + public Builder setPrivateKey(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + + privateKey_ = value; + onChanged(); + return this; + } + /** + * bytes privateKey = 1; + * @return This builder for chaining. + */ + public Builder clearPrivateKey() { + + privateKey_ = getDefaultInstance().getPrivateKey(); + onChanged(); + return this; + } + + private com.google.protobuf.ByteString certChain_ = com.google.protobuf.ByteString.EMPTY; + /** + * bytes certChain = 2; + * @return The certChain. + */ + @java.lang.Override + public com.google.protobuf.ByteString getCertChain() { + return certChain_; + } + /** + * bytes certChain = 2; + * @param value The certChain to set. + * @return This builder for chaining. + */ + public Builder setCertChain(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + + certChain_ = value; + onChanged(); + return this; + } + /** + * bytes certChain = 2; + * @return This builder for chaining. + */ + public Builder clearCertChain() { + + certChain_ = getDefaultInstance().getCertChain(); + onChanged(); + return this; + } + + private int errorCode_ = 0; + /** + * .org.opendedup.grpc.errorCodes errorCode = 3; + * @return The enum numeric value on the wire for errorCode. + */ + @java.lang.Override public int getErrorCodeValue() { + return errorCode_; + } + /** + * .org.opendedup.grpc.errorCodes errorCode = 3; + * @param value The enum numeric value on the wire for errorCode to set. + * @return This builder for chaining. + */ + public Builder setErrorCodeValue(int value) { + + errorCode_ = value; + onChanged(); + return this; + } + /** + * .org.opendedup.grpc.errorCodes errorCode = 3; + * @return The errorCode. + */ + @java.lang.Override + public org.opendedup.grpc.FileInfo.errorCodes getErrorCode() { + @SuppressWarnings("deprecation") + org.opendedup.grpc.FileInfo.errorCodes result = org.opendedup.grpc.FileInfo.errorCodes.valueOf(errorCode_); + return result == null ? org.opendedup.grpc.FileInfo.errorCodes.UNRECOGNIZED : result; + } + /** + * .org.opendedup.grpc.errorCodes errorCode = 3; + * @param value The errorCode to set. + * @return This builder for chaining. + */ + public Builder setErrorCode(org.opendedup.grpc.FileInfo.errorCodes value) { + if (value == null) { + throw new NullPointerException(); + } + + errorCode_ = value.getNumber(); + onChanged(); + return this; + } + /** + * .org.opendedup.grpc.errorCodes errorCode = 3; + * @return This builder for chaining. + */ + public Builder clearErrorCode() { + + errorCode_ = 0; + onChanged(); + return this; + } + + private java.lang.Object error_ = ""; + /** + * string error = 4; + * @return The error. + */ + public java.lang.String getError() { + java.lang.Object ref = error_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + error_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string error = 4; + * @return The bytes for error. + */ + public com.google.protobuf.ByteString + getErrorBytes() { + java.lang.Object ref = error_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + error_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string error = 4; + * @param value The error to set. + * @return This builder for chaining. + */ + public Builder setError( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + error_ = value; + onChanged(); + return this; + } + /** + * string error = 4; + * @return This builder for chaining. + */ + public Builder clearError() { + + error_ = getDefaultInstance().getError(); + onChanged(); + return this; + } + /** + * string error = 4; + * @param value The bytes for error to set. + * @return This builder for chaining. + */ + public Builder setErrorBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + error_ = value; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:org.opendedup.grpc.ExportServerCertResponse) + } + + // @@protoc_insertion_point(class_scope:org.opendedup.grpc.ExportServerCertResponse) + private static final org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse(); + } + + public static org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ExportServerCertResponse parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new ExportServerCertResponse(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface DeleteExportedCertRequestOrBuilder extends + // @@protoc_insertion_point(interface_extends:org.opendedup.grpc.DeleteExportedCertRequest) + com.google.protobuf.MessageOrBuilder { + } + /** + * Protobuf type {@code org.opendedup.grpc.DeleteExportedCertRequest} + */ + public static final class DeleteExportedCertRequest extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:org.opendedup.grpc.DeleteExportedCertRequest) + DeleteExportedCertRequestOrBuilder { + private static final long serialVersionUID = 0L; + // Use DeleteExportedCertRequest.newBuilder() to construct. + private DeleteExportedCertRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private DeleteExportedCertRequest() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new DeleteExportedCertRequest(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private DeleteExportedCertRequest( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.opendedup.grpc.EncryptionServiceOuterClass.internal_static_org_opendedup_grpc_DeleteExportedCertRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.opendedup.grpc.EncryptionServiceOuterClass.internal_static_org_opendedup_grpc_DeleteExportedCertRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest.class, org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest.Builder.class); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest)) { + return super.equals(obj); + } + org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest other = (org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest) obj; + + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code org.opendedup.grpc.DeleteExportedCertRequest} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:org.opendedup.grpc.DeleteExportedCertRequest) + org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.opendedup.grpc.EncryptionServiceOuterClass.internal_static_org_opendedup_grpc_DeleteExportedCertRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.opendedup.grpc.EncryptionServiceOuterClass.internal_static_org_opendedup_grpc_DeleteExportedCertRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest.class, org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest.Builder.class); + } + + // Construct using org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.opendedup.grpc.EncryptionServiceOuterClass.internal_static_org_opendedup_grpc_DeleteExportedCertRequest_descriptor; + } + + @java.lang.Override + public org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest getDefaultInstanceForType() { + return org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest.getDefaultInstance(); + } + + @java.lang.Override + public org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest build() { + org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest buildPartial() { + org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest result = new org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest(this); + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest) { + return mergeFrom((org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest other) { + if (other == org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest.getDefaultInstance()) return this; + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:org.opendedup.grpc.DeleteExportedCertRequest) + } + + // @@protoc_insertion_point(class_scope:org.opendedup.grpc.DeleteExportedCertRequest) + private static final org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest(); + } + + public static org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public DeleteExportedCertRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new DeleteExportedCertRequest(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface DeleteExportedCertResponseOrBuilder extends + // @@protoc_insertion_point(interface_extends:org.opendedup.grpc.DeleteExportedCertResponse) + com.google.protobuf.MessageOrBuilder { + + /** + * .org.opendedup.grpc.errorCodes errorCode = 1; + * @return The enum numeric value on the wire for errorCode. + */ + int getErrorCodeValue(); + /** + * .org.opendedup.grpc.errorCodes errorCode = 1; + * @return The errorCode. + */ + org.opendedup.grpc.FileInfo.errorCodes getErrorCode(); + + /** + * string error = 2; + * @return The error. + */ + java.lang.String getError(); + /** + * string error = 2; + * @return The bytes for error. + */ + com.google.protobuf.ByteString + getErrorBytes(); + } + /** + * Protobuf type {@code org.opendedup.grpc.DeleteExportedCertResponse} + */ + public static final class DeleteExportedCertResponse extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:org.opendedup.grpc.DeleteExportedCertResponse) + DeleteExportedCertResponseOrBuilder { + private static final long serialVersionUID = 0L; + // Use DeleteExportedCertResponse.newBuilder() to construct. + private DeleteExportedCertResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private DeleteExportedCertResponse() { + errorCode_ = 0; + error_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new DeleteExportedCertResponse(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private DeleteExportedCertResponse( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + int rawValue = input.readEnum(); + + errorCode_ = rawValue; + break; + } + case 18: { + java.lang.String s = input.readStringRequireUtf8(); + + error_ = s; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.opendedup.grpc.EncryptionServiceOuterClass.internal_static_org_opendedup_grpc_DeleteExportedCertResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.opendedup.grpc.EncryptionServiceOuterClass.internal_static_org_opendedup_grpc_DeleteExportedCertResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse.class, org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse.Builder.class); + } + + public static final int ERRORCODE_FIELD_NUMBER = 1; + private int errorCode_; + /** + * .org.opendedup.grpc.errorCodes errorCode = 1; + * @return The enum numeric value on the wire for errorCode. + */ + @java.lang.Override public int getErrorCodeValue() { + return errorCode_; + } + /** + * .org.opendedup.grpc.errorCodes errorCode = 1; + * @return The errorCode. + */ + @java.lang.Override public org.opendedup.grpc.FileInfo.errorCodes getErrorCode() { + @SuppressWarnings("deprecation") + org.opendedup.grpc.FileInfo.errorCodes result = org.opendedup.grpc.FileInfo.errorCodes.valueOf(errorCode_); + return result == null ? org.opendedup.grpc.FileInfo.errorCodes.UNRECOGNIZED : result; + } + + public static final int ERROR_FIELD_NUMBER = 2; + private volatile java.lang.Object error_; + /** + * string error = 2; + * @return The error. + */ + @java.lang.Override + public java.lang.String getError() { + java.lang.Object ref = error_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + error_ = s; + return s; + } + } + /** + * string error = 2; + * @return The bytes for error. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getErrorBytes() { + java.lang.Object ref = error_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + error_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (errorCode_ != org.opendedup.grpc.FileInfo.errorCodes.NOERR.getNumber()) { + output.writeEnum(1, errorCode_); + } + if (!getErrorBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, error_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (errorCode_ != org.opendedup.grpc.FileInfo.errorCodes.NOERR.getNumber()) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(1, errorCode_); + } + if (!getErrorBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, error_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse)) { + return super.equals(obj); + } + org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse other = (org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse) obj; + + if (errorCode_ != other.errorCode_) return false; + if (!getError() + .equals(other.getError())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + ERRORCODE_FIELD_NUMBER; + hash = (53 * hash) + errorCode_; + hash = (37 * hash) + ERROR_FIELD_NUMBER; + hash = (53 * hash) + getError().hashCode(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code org.opendedup.grpc.DeleteExportedCertResponse} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:org.opendedup.grpc.DeleteExportedCertResponse) + org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.opendedup.grpc.EncryptionServiceOuterClass.internal_static_org_opendedup_grpc_DeleteExportedCertResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.opendedup.grpc.EncryptionServiceOuterClass.internal_static_org_opendedup_grpc_DeleteExportedCertResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse.class, org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse.Builder.class); + } + + // Construct using org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + errorCode_ = 0; + + error_ = ""; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.opendedup.grpc.EncryptionServiceOuterClass.internal_static_org_opendedup_grpc_DeleteExportedCertResponse_descriptor; + } + + @java.lang.Override + public org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse getDefaultInstanceForType() { + return org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse.getDefaultInstance(); + } + + @java.lang.Override + public org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse build() { + org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse buildPartial() { + org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse result = new org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse(this); + result.errorCode_ = errorCode_; + result.error_ = error_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse) { + return mergeFrom((org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse other) { + if (other == org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse.getDefaultInstance()) return this; + if (other.errorCode_ != 0) { + setErrorCodeValue(other.getErrorCodeValue()); + } + if (!other.getError().isEmpty()) { + error_ = other.error_; + onChanged(); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private int errorCode_ = 0; + /** + * .org.opendedup.grpc.errorCodes errorCode = 1; + * @return The enum numeric value on the wire for errorCode. + */ + @java.lang.Override public int getErrorCodeValue() { + return errorCode_; + } + /** + * .org.opendedup.grpc.errorCodes errorCode = 1; + * @param value The enum numeric value on the wire for errorCode to set. + * @return This builder for chaining. + */ + public Builder setErrorCodeValue(int value) { + + errorCode_ = value; + onChanged(); + return this; + } + /** + * .org.opendedup.grpc.errorCodes errorCode = 1; + * @return The errorCode. + */ + @java.lang.Override + public org.opendedup.grpc.FileInfo.errorCodes getErrorCode() { + @SuppressWarnings("deprecation") + org.opendedup.grpc.FileInfo.errorCodes result = org.opendedup.grpc.FileInfo.errorCodes.valueOf(errorCode_); + return result == null ? org.opendedup.grpc.FileInfo.errorCodes.UNRECOGNIZED : result; + } + /** + * .org.opendedup.grpc.errorCodes errorCode = 1; + * @param value The errorCode to set. + * @return This builder for chaining. + */ + public Builder setErrorCode(org.opendedup.grpc.FileInfo.errorCodes value) { + if (value == null) { + throw new NullPointerException(); + } + + errorCode_ = value.getNumber(); + onChanged(); + return this; + } + /** + * .org.opendedup.grpc.errorCodes errorCode = 1; + * @return This builder for chaining. + */ + public Builder clearErrorCode() { + + errorCode_ = 0; + onChanged(); + return this; + } + + private java.lang.Object error_ = ""; + /** + * string error = 2; + * @return The error. + */ + public java.lang.String getError() { + java.lang.Object ref = error_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + error_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string error = 2; + * @return The bytes for error. + */ + public com.google.protobuf.ByteString + getErrorBytes() { + java.lang.Object ref = error_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + error_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string error = 2; + * @param value The error to set. + * @return This builder for chaining. + */ + public Builder setError( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + error_ = value; + onChanged(); + return this; + } + /** + * string error = 2; + * @return This builder for chaining. + */ + public Builder clearError() { + + error_ = getDefaultInstance().getError(); + onChanged(); + return this; + } + /** + * string error = 2; + * @param value The bytes for error to set. + * @return This builder for chaining. + */ + public Builder setErrorBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + error_ = value; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:org.opendedup.grpc.DeleteExportedCertResponse) + } + + // @@protoc_insertion_point(class_scope:org.opendedup.grpc.DeleteExportedCertResponse) + private static final org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse(); + } + + public static org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public DeleteExportedCertResponse parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new DeleteExportedCertResponse(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_org_opendedup_grpc_EncryptionKeyVerifyRequest_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_org_opendedup_grpc_EncryptionKeyVerifyRequest_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_org_opendedup_grpc_EncryptionKeyVerifyResponse_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_org_opendedup_grpc_EncryptionKeyVerifyResponse_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_org_opendedup_grpc_ExportServerCertRequest_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_org_opendedup_grpc_ExportServerCertRequest_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_org_opendedup_grpc_ExportServerCertResponse_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_org_opendedup_grpc_ExportServerCertResponse_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_org_opendedup_grpc_DeleteExportedCertRequest_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_org_opendedup_grpc_DeleteExportedCertRequest_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_org_opendedup_grpc_DeleteExportedCertResponse_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_org_opendedup_grpc_DeleteExportedCertResponse_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\027EncryptionService.proto\022\022org.opendedup" + + ".grpc\032\016FileInfo.proto\"*\n\032EncryptionKeyVe" + + "rifyRequest\022\014\n\004hash\030\001 \001(\t\"o\n\033EncryptionK" + + "eyVerifyResponse\022\016\n\006accept\030\001 \001(\010\0221\n\terro" + + "rCode\030\002 \001(\0162\036.org.opendedup.grpc.errorCo" + + "des\022\r\n\005error\030\003 \001(\t\"\031\n\027ExportServerCertRe" + + "quest\"\203\001\n\030ExportServerCertResponse\022\022\n\npr" + + "ivateKey\030\001 \001(\014\022\021\n\tcertChain\030\002 \001(\014\0221\n\terr" + + "orCode\030\003 \001(\0162\036.org.opendedup.grpc.errorC" + + "odes\022\r\n\005error\030\004 \001(\t\"\033\n\031DeleteExportedCer" + + "tRequest\"^\n\032DeleteExportedCertResponse\0221" + + "\n\terrorCode\030\001 \001(\0162\036.org.opendedup.grpc.e" + + "rrorCodes\022\r\n\005error\030\002 \001(\t2\366\002\n\021EncryptionS" + + "ervice\022v\n\023ValidateCertificate\022..org.open" + + "dedup.grpc.EncryptionKeyVerifyRequest\032/." + + "org.opendedup.grpc.EncryptionKeyVerifyRe" + + "sponse\022t\n\027ExportServerCertificate\022+.org." + + "opendedup.grpc.ExportServerCertRequest\032," + + ".org.opendedup.grpc.ExportServerCertResp" + + "onse\022s\n\022DeleteExportedCert\022-.org.opended" + + "up.grpc.DeleteExportedCertRequest\032..org." + + "opendedup.grpc.DeleteExportedCertRespons" + + "eB0Z.github.com/opendedup/sdfs-client-go" + + "/sdfs/;sdfsb\006proto3" + }; + descriptor = com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + org.opendedup.grpc.FileInfo.getDescriptor(), + }); + internal_static_org_opendedup_grpc_EncryptionKeyVerifyRequest_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_org_opendedup_grpc_EncryptionKeyVerifyRequest_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_org_opendedup_grpc_EncryptionKeyVerifyRequest_descriptor, + new java.lang.String[] { "Hash", }); + internal_static_org_opendedup_grpc_EncryptionKeyVerifyResponse_descriptor = + getDescriptor().getMessageTypes().get(1); + internal_static_org_opendedup_grpc_EncryptionKeyVerifyResponse_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_org_opendedup_grpc_EncryptionKeyVerifyResponse_descriptor, + new java.lang.String[] { "Accept", "ErrorCode", "Error", }); + internal_static_org_opendedup_grpc_ExportServerCertRequest_descriptor = + getDescriptor().getMessageTypes().get(2); + internal_static_org_opendedup_grpc_ExportServerCertRequest_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_org_opendedup_grpc_ExportServerCertRequest_descriptor, + new java.lang.String[] { }); + internal_static_org_opendedup_grpc_ExportServerCertResponse_descriptor = + getDescriptor().getMessageTypes().get(3); + internal_static_org_opendedup_grpc_ExportServerCertResponse_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_org_opendedup_grpc_ExportServerCertResponse_descriptor, + new java.lang.String[] { "PrivateKey", "CertChain", "ErrorCode", "Error", }); + internal_static_org_opendedup_grpc_DeleteExportedCertRequest_descriptor = + getDescriptor().getMessageTypes().get(4); + internal_static_org_opendedup_grpc_DeleteExportedCertRequest_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_org_opendedup_grpc_DeleteExportedCertRequest_descriptor, + new java.lang.String[] { }); + internal_static_org_opendedup_grpc_DeleteExportedCertResponse_descriptor = + getDescriptor().getMessageTypes().get(5); + internal_static_org_opendedup_grpc_DeleteExportedCertResponse_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_org_opendedup_grpc_DeleteExportedCertResponse_descriptor, + new java.lang.String[] { "ErrorCode", "Error", }); + org.opendedup.grpc.FileInfo.getDescriptor(); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/src/org/opendedup/grpc/FileIOServiceGrpc.java b/src/org/opendedup/grpc/FileIOServiceGrpc.java index d0bb6c188..db31a999a 100644 --- a/src/org/opendedup/grpc/FileIOServiceGrpc.java +++ b/src/org/opendedup/grpc/FileIOServiceGrpc.java @@ -554,6 +554,37 @@ org.opendedup.grpc.IOService.DataWriteResponse> getWriteMethod() { return getWriteMethod; } + private static volatile io.grpc.MethodDescriptor getStreamWriteMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "StreamWrite", + requestType = org.opendedup.grpc.IOService.DataWriteRequest.class, + responseType = org.opendedup.grpc.IOService.DataWriteResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.CLIENT_STREAMING) + public static io.grpc.MethodDescriptor getStreamWriteMethod() { + io.grpc.MethodDescriptor getStreamWriteMethod; + if ((getStreamWriteMethod = FileIOServiceGrpc.getStreamWriteMethod) == null) { + synchronized (FileIOServiceGrpc.class) { + if ((getStreamWriteMethod = FileIOServiceGrpc.getStreamWriteMethod) == null) { + FileIOServiceGrpc.getStreamWriteMethod = getStreamWriteMethod = + io.grpc.MethodDescriptor.newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.CLIENT_STREAMING) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "StreamWrite")) + .setSampledToLocalTracing(true) + .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + org.opendedup.grpc.IOService.DataWriteRequest.getDefaultInstance())) + .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + org.opendedup.grpc.IOService.DataWriteResponse.getDefaultInstance())) + .setSchemaDescriptor(new FileIOServiceMethodDescriptorSupplier("StreamWrite")) + .build(); + } + } + } + return getStreamWriteMethod; + } + private static volatile io.grpc.MethodDescriptor getReadMethod; @@ -1050,6 +1081,68 @@ org.opendedup.grpc.FileInfo.FileMessageResponse> getFileNotificationMethod() { return getFileNotificationMethod; } + private static volatile io.grpc.MethodDescriptor getSetRetrievalTierMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "SetRetrievalTier", + requestType = org.opendedup.grpc.IOService.SetRetrievalTierRequest.class, + responseType = org.opendedup.grpc.IOService.SetRetrievalTierResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor getSetRetrievalTierMethod() { + io.grpc.MethodDescriptor getSetRetrievalTierMethod; + if ((getSetRetrievalTierMethod = FileIOServiceGrpc.getSetRetrievalTierMethod) == null) { + synchronized (FileIOServiceGrpc.class) { + if ((getSetRetrievalTierMethod = FileIOServiceGrpc.getSetRetrievalTierMethod) == null) { + FileIOServiceGrpc.getSetRetrievalTierMethod = getSetRetrievalTierMethod = + io.grpc.MethodDescriptor.newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SetRetrievalTier")) + .setSampledToLocalTracing(true) + .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + org.opendedup.grpc.IOService.SetRetrievalTierRequest.getDefaultInstance())) + .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + org.opendedup.grpc.IOService.SetRetrievalTierResponse.getDefaultInstance())) + .setSchemaDescriptor(new FileIOServiceMethodDescriptorSupplier("SetRetrievalTier")) + .build(); + } + } + } + return getSetRetrievalTierMethod; + } + + private static volatile io.grpc.MethodDescriptor getGetRetrievalTierMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "GetRetrievalTier", + requestType = org.opendedup.grpc.IOService.GetRetrievalTierRequest.class, + responseType = org.opendedup.grpc.IOService.GetRetrievalTierResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor getGetRetrievalTierMethod() { + io.grpc.MethodDescriptor getGetRetrievalTierMethod; + if ((getGetRetrievalTierMethod = FileIOServiceGrpc.getGetRetrievalTierMethod) == null) { + synchronized (FileIOServiceGrpc.class) { + if ((getGetRetrievalTierMethod = FileIOServiceGrpc.getGetRetrievalTierMethod) == null) { + FileIOServiceGrpc.getGetRetrievalTierMethod = getGetRetrievalTierMethod = + io.grpc.MethodDescriptor.newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetRetrievalTier")) + .setSampledToLocalTracing(true) + .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + org.opendedup.grpc.IOService.GetRetrievalTierRequest.getDefaultInstance())) + .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + org.opendedup.grpc.IOService.GetRetrievalTierResponse.getDefaultInstance())) + .setSchemaDescriptor(new FileIOServiceMethodDescriptorSupplier("GetRetrievalTier")) + .build(); + } + } + } + return getGetRetrievalTierMethod; + } + /** * Creates a new async stub that supports all call types for the service */ @@ -1220,6 +1313,13 @@ public void write(org.opendedup.grpc.IOService.DataWriteRequest request, asyncUnimplementedUnaryCall(getWriteMethod(), responseObserver); } + /** + */ + public io.grpc.stub.StreamObserver streamWrite( + io.grpc.stub.StreamObserver responseObserver) { + return asyncUnimplementedStreamingCall(getStreamWriteMethod(), responseObserver); + } + /** */ public void read(org.opendedup.grpc.IOService.DataReadRequest request, @@ -1332,6 +1432,20 @@ public void fileNotification(org.opendedup.grpc.IOService.SyncNotificationSubscr asyncUnimplementedUnaryCall(getFileNotificationMethod(), responseObserver); } + /** + */ + public void setRetrievalTier(org.opendedup.grpc.IOService.SetRetrievalTierRequest request, + io.grpc.stub.StreamObserver responseObserver) { + asyncUnimplementedUnaryCall(getSetRetrievalTierMethod(), responseObserver); + } + + /** + */ + public void getRetrievalTier(org.opendedup.grpc.IOService.GetRetrievalTierRequest request, + io.grpc.stub.StreamObserver responseObserver) { + asyncUnimplementedUnaryCall(getGetRetrievalTierMethod(), responseObserver); + } + @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() { return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor()) .addMethod( @@ -1453,6 +1567,13 @@ public void fileNotification(org.opendedup.grpc.IOService.SyncNotificationSubscr org.opendedup.grpc.IOService.DataWriteRequest, org.opendedup.grpc.IOService.DataWriteResponse>( this, METHODID_WRITE))) + .addMethod( + getStreamWriteMethod(), + asyncClientStreamingCall( + new MethodHandlers< + org.opendedup.grpc.IOService.DataWriteRequest, + org.opendedup.grpc.IOService.DataWriteResponse>( + this, METHODID_STREAM_WRITE))) .addMethod( getReadMethod(), asyncUnaryCall( @@ -1565,6 +1686,20 @@ public void fileNotification(org.opendedup.grpc.IOService.SyncNotificationSubscr org.opendedup.grpc.IOService.SyncNotificationSubscription, org.opendedup.grpc.FileInfo.FileMessageResponse>( this, METHODID_FILE_NOTIFICATION))) + .addMethod( + getSetRetrievalTierMethod(), + asyncUnaryCall( + new MethodHandlers< + org.opendedup.grpc.IOService.SetRetrievalTierRequest, + org.opendedup.grpc.IOService.SetRetrievalTierResponse>( + this, METHODID_SET_RETRIEVAL_TIER))) + .addMethod( + getGetRetrievalTierMethod(), + asyncUnaryCall( + new MethodHandlers< + org.opendedup.grpc.IOService.GetRetrievalTierRequest, + org.opendedup.grpc.IOService.GetRetrievalTierResponse>( + this, METHODID_GET_RETRIEVAL_TIER))) .build(); } } @@ -1722,6 +1857,14 @@ public void write(org.opendedup.grpc.IOService.DataWriteRequest request, getChannel().newCall(getWriteMethod(), getCallOptions()), request, responseObserver); } + /** + */ + public io.grpc.stub.StreamObserver streamWrite( + io.grpc.stub.StreamObserver responseObserver) { + return asyncClientStreamingCall( + getChannel().newCall(getStreamWriteMethod(), getCallOptions()), responseObserver); + } + /** */ public void read(org.opendedup.grpc.IOService.DataReadRequest request, @@ -1849,6 +1992,22 @@ public void fileNotification(org.opendedup.grpc.IOService.SyncNotificationSubscr asyncServerStreamingCall( getChannel().newCall(getFileNotificationMethod(), getCallOptions()), request, responseObserver); } + + /** + */ + public void setRetrievalTier(org.opendedup.grpc.IOService.SetRetrievalTierRequest request, + io.grpc.stub.StreamObserver responseObserver) { + asyncUnaryCall( + getChannel().newCall(getSetRetrievalTierMethod(), getCallOptions()), request, responseObserver); + } + + /** + */ + public void getRetrievalTier(org.opendedup.grpc.IOService.GetRetrievalTierRequest request, + io.grpc.stub.StreamObserver responseObserver) { + asyncUnaryCall( + getChannel().newCall(getGetRetrievalTierMethod(), getCallOptions()), request, responseObserver); + } } /** @@ -2099,6 +2258,20 @@ public java.util.Iterator fileN return blockingServerStreamingCall( getChannel(), getFileNotificationMethod(), getCallOptions(), request); } + + /** + */ + public org.opendedup.grpc.IOService.SetRetrievalTierResponse setRetrievalTier(org.opendedup.grpc.IOService.SetRetrievalTierRequest request) { + return blockingUnaryCall( + getChannel(), getSetRetrievalTierMethod(), getCallOptions(), request); + } + + /** + */ + public org.opendedup.grpc.IOService.GetRetrievalTierResponse getRetrievalTier(org.opendedup.grpc.IOService.GetRetrievalTierRequest request) { + return blockingUnaryCall( + getChannel(), getGetRetrievalTierMethod(), getCallOptions(), request); + } } /** @@ -2373,6 +2546,22 @@ public com.google.common.util.concurrent.ListenableFuture setRetrievalTier( + org.opendedup.grpc.IOService.SetRetrievalTierRequest request) { + return futureUnaryCall( + getChannel().newCall(getSetRetrievalTierMethod(), getCallOptions()), request); + } + + /** + */ + public com.google.common.util.concurrent.ListenableFuture getRetrievalTier( + org.opendedup.grpc.IOService.GetRetrievalTierRequest request) { + return futureUnaryCall( + getChannel().newCall(getGetRetrievalTierMethod(), getCallOptions()), request); + } } private static final int METHODID_GET_XATTR_SIZE = 0; @@ -2408,6 +2597,9 @@ public com.google.common.util.concurrent.ListenableFuture implements io.grpc.stub.ServerCalls.UnaryMethod, @@ -2558,6 +2750,14 @@ public void invoke(Req request, io.grpc.stub.StreamObserver responseObserv serviceImpl.fileNotification((org.opendedup.grpc.IOService.SyncNotificationSubscription) request, (io.grpc.stub.StreamObserver) responseObserver); break; + case METHODID_SET_RETRIEVAL_TIER: + serviceImpl.setRetrievalTier((org.opendedup.grpc.IOService.SetRetrievalTierRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_GET_RETRIEVAL_TIER: + serviceImpl.getRetrievalTier((org.opendedup.grpc.IOService.GetRetrievalTierRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; default: throw new AssertionError(); } @@ -2568,6 +2768,9 @@ public void invoke(Req request, io.grpc.stub.StreamObserver responseObserv public io.grpc.stub.StreamObserver invoke( io.grpc.stub.StreamObserver responseObserver) { switch (methodId) { + case METHODID_STREAM_WRITE: + return (io.grpc.stub.StreamObserver) serviceImpl.streamWrite( + (io.grpc.stub.StreamObserver) responseObserver); default: throw new AssertionError(); } @@ -2636,6 +2839,7 @@ public static io.grpc.ServiceDescriptor getServiceDescriptor() { .addMethod(getRmDirMethod()) .addMethod(getUnlinkMethod()) .addMethod(getWriteMethod()) + .addMethod(getStreamWriteMethod()) .addMethod(getReadMethod()) .addMethod(getReleaseMethod()) .addMethod(getMknodMethod()) @@ -2652,6 +2856,8 @@ public static io.grpc.ServiceDescriptor getServiceDescriptor() { .addMethod(getGetCloudMetaFileMethod()) .addMethod(getStatFSMethod()) .addMethod(getFileNotificationMethod()) + .addMethod(getSetRetrievalTierMethod()) + .addMethod(getGetRetrievalTierMethod()) .build(); } } diff --git a/src/org/opendedup/grpc/FileInfo.java b/src/org/opendedup/grpc/FileInfo.java index 08ed8d1fa..73ccb8896 100644 --- a/src/org/opendedup/grpc/FileInfo.java +++ b/src/org/opendedup/grpc/FileInfo.java @@ -2384,6 +2384,12 @@ public interface FileInfoRequestOrBuilder extends */ com.google.protobuf.ByteString getListGuidBytes(); + + /** + * int64 pvolumeID = 5; + * @return The pvolumeID. + */ + long getPvolumeID(); } /** *
@@ -2458,6 +2464,11 @@ private FileInfoRequest(
               listGuid_ = s;
               break;
             }
+            case 40: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -2588,6 +2599,17 @@ public java.lang.String getListGuid() {
       }
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 5;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 5;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -2614,6 +2636,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (!getListGuidBytes().isEmpty()) {
         com.google.protobuf.GeneratedMessageV3.writeString(output, 4, listGuid_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(5, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -2637,6 +2662,10 @@ public int getSerializedSize() {
       if (!getListGuidBytes().isEmpty()) {
         size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, listGuid_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(5, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -2660,6 +2689,8 @@ public boolean equals(final java.lang.Object obj) {
           != other.getNumberOfFiles()) return false;
       if (!getListGuid()
           .equals(other.getListGuid())) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -2680,6 +2711,9 @@ public int hashCode() {
       hash = (53 * hash) + getNumberOfFiles();
       hash = (37 * hash) + LISTGUID_FIELD_NUMBER;
       hash = (53 * hash) + getListGuid().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -2825,6 +2859,8 @@ public Builder clear() {
 
         listGuid_ = "";
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -2855,6 +2891,7 @@ public org.opendedup.grpc.FileInfo.FileInfoRequest buildPartial() {
         result.compact_ = compact_;
         result.numberOfFiles_ = numberOfFiles_;
         result.listGuid_ = listGuid_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -2917,6 +2954,9 @@ public Builder mergeFrom(org.opendedup.grpc.FileInfo.FileInfoRequest other) {
           listGuid_ = other.listGuid_;
           onChanged();
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -3159,6 +3199,37 @@ public Builder setListGuidBytes(
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 5;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 5;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 5;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -4809,16 +4880,10 @@ org.opendedup.grpc.FileInfo.FileInfoResponseOrBuilder getFilesOrBuilder(
         getParentPathBytes();
 
     /**
-     * string volumeid = 23;
-     * @return The volumeid.
-     */
-    java.lang.String getVolumeid();
-    /**
-     * string volumeid = 23;
-     * @return The bytes for volumeid.
+     * int64 pvolumeID = 23;
+     * @return The pvolumeID.
      */
-    com.google.protobuf.ByteString
-        getVolumeidBytes();
+    long getPvolumeID();
 
     /**
      * .org.opendedup.grpc.IOMonitorResponse ioMonitor = 24;
@@ -4930,7 +4995,6 @@ private FileInfoResponse() {
       id_ = "";
       files_ = java.util.Collections.emptyList();
       parentPath_ = "";
-      volumeid_ = "";
       symlinkPath_ = "";
       version_ = "";
     }
@@ -5092,10 +5156,9 @@ private FileInfoResponse(
               parentPath_ = s;
               break;
             }
-            case 186: {
-              java.lang.String s = input.readStringRequireUtf8();
+            case 184: {
 
-              volumeid_ = s;
+              pvolumeID_ = input.readInt64();
               break;
             }
             case 194: {
@@ -5806,42 +5869,15 @@ public java.lang.String getParentPath() {
       }
     }
 
-    public static final int VOLUMEID_FIELD_NUMBER = 23;
-    private volatile java.lang.Object volumeid_;
-    /**
-     * string volumeid = 23;
-     * @return The volumeid.
-     */
-    @java.lang.Override
-    public java.lang.String getVolumeid() {
-      java.lang.Object ref = volumeid_;
-      if (ref instanceof java.lang.String) {
-        return (java.lang.String) ref;
-      } else {
-        com.google.protobuf.ByteString bs = 
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        volumeid_ = s;
-        return s;
-      }
-    }
+    public static final int PVOLUMEID_FIELD_NUMBER = 23;
+    private long pvolumeID_;
     /**
-     * string volumeid = 23;
-     * @return The bytes for volumeid.
+     * int64 pvolumeID = 23;
+     * @return The pvolumeID.
      */
     @java.lang.Override
-    public com.google.protobuf.ByteString
-        getVolumeidBytes() {
-      java.lang.Object ref = volumeid_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        volumeid_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
+    public long getPvolumeID() {
+      return pvolumeID_;
     }
 
     public static final int IOMONITOR_FIELD_NUMBER = 24;
@@ -6114,8 +6150,8 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (!getParentPathBytes().isEmpty()) {
         com.google.protobuf.GeneratedMessageV3.writeString(output, 22, parentPath_);
       }
-      if (!getVolumeidBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 23, volumeid_);
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(23, pvolumeID_);
       }
       if (ioMonitor_ != null) {
         output.writeMessage(24, getIoMonitor());
@@ -6240,8 +6276,9 @@ public int getSerializedSize() {
       if (!getParentPathBytes().isEmpty()) {
         size += com.google.protobuf.GeneratedMessageV3.computeStringSize(22, parentPath_);
       }
-      if (!getVolumeidBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(23, volumeid_);
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(23, pvolumeID_);
       }
       if (ioMonitor_ != null) {
         size += com.google.protobuf.CodedOutputStream
@@ -6343,8 +6380,8 @@ public boolean equals(final java.lang.Object obj) {
           .equals(other.getFilesList())) return false;
       if (!getParentPath()
           .equals(other.getParentPath())) return false;
-      if (!getVolumeid()
-          .equals(other.getVolumeid())) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (hasIoMonitor() != other.hasIoMonitor()) return false;
       if (hasIoMonitor()) {
         if (!getIoMonitor()
@@ -6441,8 +6478,9 @@ public int hashCode() {
       }
       hash = (37 * hash) + PARENTPATH_FIELD_NUMBER;
       hash = (53 * hash) + getParentPath().hashCode();
-      hash = (37 * hash) + VOLUMEID_FIELD_NUMBER;
-      hash = (53 * hash) + getVolumeid().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       if (hasIoMonitor()) {
         hash = (37 * hash) + IOMONITOR_FIELD_NUMBER;
         hash = (53 * hash) + getIoMonitor().hashCode();
@@ -6660,7 +6698,7 @@ public Builder clear() {
         }
         parentPath_ = "";
 
-        volumeid_ = "";
+        pvolumeID_ = 0L;
 
         if (ioMonitorBuilder_ == null) {
           ioMonitor_ = null;
@@ -6753,7 +6791,7 @@ public org.opendedup.grpc.FileInfo.FileInfoResponse buildPartial() {
           result.files_ = filesBuilder_.build();
         }
         result.parentPath_ = parentPath_;
-        result.volumeid_ = volumeid_;
+        result.pvolumeID_ = pvolumeID_;
         if (ioMonitorBuilder_ == null) {
           result.ioMonitor_ = ioMonitor_;
         } else {
@@ -6936,9 +6974,8 @@ public Builder mergeFrom(org.opendedup.grpc.FileInfo.FileInfoResponse other) {
           parentPath_ = other.parentPath_;
           onChanged();
         }
-        if (!other.getVolumeid().isEmpty()) {
-          volumeid_ = other.volumeid_;
-          onChanged();
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
         }
         if (other.hasIoMonitor()) {
           mergeIoMonitor(other.getIoMonitor());
@@ -8443,78 +8480,33 @@ public Builder setParentPathBytes(
         return this;
       }
 
-      private java.lang.Object volumeid_ = "";
-      /**
-       * string volumeid = 23;
-       * @return The volumeid.
-       */
-      public java.lang.String getVolumeid() {
-        java.lang.Object ref = volumeid_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          volumeid_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * string volumeid = 23;
-       * @return The bytes for volumeid.
-       */
-      public com.google.protobuf.ByteString
-          getVolumeidBytes() {
-        java.lang.Object ref = volumeid_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          volumeid_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
+      private long pvolumeID_ ;
       /**
-       * string volumeid = 23;
-       * @param value The volumeid to set.
-       * @return This builder for chaining.
+       * int64 pvolumeID = 23;
+       * @return The pvolumeID.
        */
-      public Builder setVolumeid(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        volumeid_ = value;
-        onChanged();
-        return this;
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
       }
       /**
-       * string volumeid = 23;
+       * int64 pvolumeID = 23;
+       * @param value The pvolumeID to set.
        * @return This builder for chaining.
        */
-      public Builder clearVolumeid() {
+      public Builder setPvolumeID(long value) {
         
-        volumeid_ = getDefaultInstance().getVolumeid();
+        pvolumeID_ = value;
         onChanged();
         return this;
       }
       /**
-       * string volumeid = 23;
-       * @param value The bytes for volumeid to set.
+       * int64 pvolumeID = 23;
        * @return This builder for chaining.
        */
-      public Builder setVolumeidBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
+      public Builder clearPvolumeID() {
         
-        volumeid_ = value;
+        pvolumeID_ = 0L;
         onChanged();
         return this;
       }
@@ -10832,6 +10824,12 @@ org.opendedup.grpc.FileInfo.FileAttributesOrBuilder getFileAttributesOrBuilder(
      */
     com.google.protobuf.ByteString
         getFilePathBytes();
+
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.WFileAttributesRequest}
@@ -10896,6 +10894,11 @@ private WFileAttributesRequest(
               filePath_ = s;
               break;
             }
+            case 24: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -11009,6 +11012,17 @@ public java.lang.String getFilePath() {
       }
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 3;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -11029,6 +11043,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (!getFilePathBytes().isEmpty()) {
         com.google.protobuf.GeneratedMessageV3.writeString(output, 2, filePath_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(3, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -11045,6 +11062,10 @@ public int getSerializedSize() {
       if (!getFilePathBytes().isEmpty()) {
         size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, filePath_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(3, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -11064,6 +11085,8 @@ public boolean equals(final java.lang.Object obj) {
           .equals(other.getFileAttributesList())) return false;
       if (!getFilePath()
           .equals(other.getFilePath())) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -11081,6 +11104,9 @@ public int hashCode() {
       }
       hash = (37 * hash) + FILEPATH_FIELD_NUMBER;
       hash = (53 * hash) + getFilePath().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -11223,6 +11249,8 @@ public Builder clear() {
         }
         filePath_ = "";
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -11260,6 +11288,7 @@ public org.opendedup.grpc.FileInfo.WFileAttributesRequest buildPartial() {
           result.fileAttributes_ = fileAttributesBuilder_.build();
         }
         result.filePath_ = filePath_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -11338,6 +11367,9 @@ public Builder mergeFrom(org.opendedup.grpc.FileInfo.WFileAttributesRequest othe
           filePath_ = other.filePath_;
           onChanged();
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -11683,6 +11715,37 @@ public Builder setFilePathBytes(
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 3;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -12426,6 +12489,12 @@ public interface RFileAttributesRequestOrBuilder extends
      */
     com.google.protobuf.ByteString
         getFilePathBytes();
+
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.RFileAttributesRequest}
@@ -12479,6 +12548,11 @@ private RFileAttributesRequest(
               filePath_ = s;
               break;
             }
+            case 16: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -12549,6 +12623,17 @@ public java.lang.String getFilePath() {
       }
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 2;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -12566,6 +12651,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (!getFilePathBytes().isEmpty()) {
         com.google.protobuf.GeneratedMessageV3.writeString(output, 1, filePath_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(2, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -12578,6 +12666,10 @@ public int getSerializedSize() {
       if (!getFilePathBytes().isEmpty()) {
         size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, filePath_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(2, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -12595,6 +12687,8 @@ public boolean equals(final java.lang.Object obj) {
 
       if (!getFilePath()
           .equals(other.getFilePath())) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -12608,6 +12702,9 @@ public int hashCode() {
       hash = (19 * hash) + getDescriptor().hashCode();
       hash = (37 * hash) + FILEPATH_FIELD_NUMBER;
       hash = (53 * hash) + getFilePath().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -12743,6 +12840,8 @@ public Builder clear() {
         super.clear();
         filePath_ = "";
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -12770,6 +12869,7 @@ public org.opendedup.grpc.FileInfo.RFileAttributesRequest build() {
       public org.opendedup.grpc.FileInfo.RFileAttributesRequest buildPartial() {
         org.opendedup.grpc.FileInfo.RFileAttributesRequest result = new org.opendedup.grpc.FileInfo.RFileAttributesRequest(this);
         result.filePath_ = filePath_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -12822,6 +12922,9 @@ public Builder mergeFrom(org.opendedup.grpc.FileInfo.RFileAttributesRequest othe
           filePath_ = other.filePath_;
           onChanged();
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -12926,6 +13029,37 @@ public Builder setFilePathBytes(
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 2;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -14801,100 +14935,102 @@ public org.opendedup.grpc.FileInfo.FileAttributes getDefaultInstanceForType() {
       descriptor;
   static {
     java.lang.String[] descriptorData = {
-      "\n\016FileInfo.proto\022\022org.opendedup.grpc\"]\n\017" +
+      "\n\016FileInfo.proto\022\022org.opendedup.grpc\"p\n\017" +
       "FileInfoRequest\022\020\n\010fileName\030\001 \001(\t\022\017\n\007com" +
       "pact\030\002 \001(\010\022\025\n\rnumberOfFiles\030\003 \001(\005\022\020\n\010lis" +
-      "tGuid\030\004 \001(\t\"\353\001\n\023FileMessageResponse\022\r\n\005e" +
-      "rror\030\001 \001(\t\022\020\n\010listGuid\030\002 \001(\t\0226\n\010response" +
-      "\030\003 \003(\0132$.org.opendedup.grpc.FileInfoResp" +
-      "onse\0221\n\terrorCode\030\004 \001(\0162\036.org.opendedup." +
-      "grpc.errorCodes\022\030\n\020maxNumberOfFiles\030\005 \001(" +
-      "\005\022.\n\006action\030\006 \001(\0162\036.org.opendedup.grpc.s" +
-      "yncaction\"\246\006\n\020FileInfoResponse\022\020\n\010fileNa" +
-      "me\030\001 \001(\t\022\020\n\010filePath\030\002 \001(\t\022;\n\004type\030\003 \001(\016" +
-      "2-.org.opendedup.grpc.FileInfoResponse.f" +
-      "ileType\022\020\n\010sdfsPath\030\004 \001(\t\022\r\n\005atime\030\005 \001(\003" +
-      "\022\r\n\005mtime\030\006 \001(\003\022\r\n\005ctime\030\007 \001(\003\022\016\n\006hidden" +
-      "\030\010 \001(\010\022\014\n\004size\030\t \001(\003\022\014\n\004open\030\n \001(\010\022\021\n\tfi" +
-      "leGuild\030\013 \001(\t\022\017\n\007mapGuid\030\014 \001(\t\022\022\n\nlocalO" +
-      "wner\030\r \001(\010\022\017\n\007execute\030\016 \001(\010\022\014\n\004read\030\017 \001(" +
-      "\010\022\r\n\005write\030\020 \001(\010\022\021\n\timporting\030\021 \001(\010\022\017\n\007s" +
-      "ymlink\030\022 \001(\010\022:\n\016fileAttributes\030\023 \003(\0132\".o" +
-      "rg.opendedup.grpc.FileAttributes\022\n\n\002id\030\024" +
-      " \001(\t\0223\n\005files\030\025 \003(\0132$.org.opendedup.grpc" +
-      ".FileInfoResponse\022\022\n\nparentPath\030\026 \001(\t\022\020\n" +
-      "\010volumeid\030\027 \001(\t\0228\n\tioMonitor\030\030 \001(\0132%.org" +
-      ".opendedup.grpc.IOMonitorResponse\022\023\n\013sym" +
-      "linkPath\030\031 \001(\t\022\020\n\010group_id\030\032 \001(\003\022\017\n\007user" +
-      "_id\030\033 \001(\003\022\023\n\013permissions\030\034 \001(\005\022\020\n\010hashco" +
-      "de\030\035 \001(\003\022\025\n\rretentionLock\030\036 \001(\003\022\022\n\nattri" +
-      "butes\030\037 \001(\003\022\017\n\007version\030  \001(\t\022\014\n\004mode\030! \001" +
-      "(\005\022\027\n\017delete_on_close\030\" \001(\010\"\035\n\010fileType\022" +
-      "\010\n\004FILE\020\000\022\007\n\003DIR\020\001\"\347\002\n\021IOMonitorResponse" +
-      "\022\033\n\023virtualBytesWritten\030\001 \001(\003\022\032\n\022actualB" +
-      "ytesWritten\030\002 \001(\003\022\021\n\tbytesRead\030\003 \001(\003\022\027\n\017" +
-      "duplicateBlocks\030\004 \001(\003\022\021\n\twriteOpts\030\005 \001(\003" +
-      "\022\020\n\010readOpts\030\006 \001(\003\022\022\n\nmaxReadOps\030\007 \001(\003\022\023" +
-      "\n\013maxWriteOps\030\010 \001(\003\022\017\n\007maxIops\030\t \001(\003\022\023\n\013" +
-      "maxReadMbps\030\n \001(\003\022\024\n\014maxWriteMbps\030\013 \001(\003\022" +
-      "\017\n\007maxMbps\030\014 \001(\003\022\r\n\005ioQos\030\r \001(\005\022\021\n\tioPro" +
-      "file\030\016 \001(\t\022\017\n\007maxRbps\030\017 \001(\003\022\017\n\007maxWbps\030\020" +
-      " \001(\003\022\016\n\006maxBps\030\021 \001(\003\"f\n\026WFileAttributesR" +
-      "equest\022:\n\016fileAttributes\030\001 \003(\0132\".org.ope" +
-      "ndedup.grpc.FileAttributes\022\020\n\010filePath\030\002" +
-      " \001(\t\"[\n\027WFileAttributesResponse\022\r\n\005error" +
-      "\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.org.opendedu" +
-      "p.grpc.errorCodes\"*\n\026RFileAttributesRequ" +
-      "est\022\020\n\010filePath\030\001 \001(\t\"\227\001\n\027RFileAttribute" +
-      "sResponse\022:\n\016fileAttributes\030\001 \003(\0132\".org." +
-      "opendedup.grpc.FileAttributes\022\r\n\005error\030\002" +
-      " \001(\t\0221\n\terrorCode\030\003 \001(\0162\036.org.opendedup." +
-      "grpc.errorCodes\",\n\016FileAttributes\022\013\n\003key" +
-      "\030\001 \001(\t\022\r\n\005value\030\002 \001(\t*L\n\nsyncaction\022\014\n\010D" +
-      "OWNLOAD\020\000\022\t\n\005WRITE\020\001\022\n\n\006DELETE\020\002\022\n\n\006UPLO" +
-      "AD\020\003\022\r\n\tKEEPALIVE\020\004*\335\014\n\nerrorCodes\022\t\n\005NO" +
-      "ERR\020\000\022\t\n\005EPERM\020\001\022\n\n\006ENOENT\020\002\022\t\n\005ESRCH\020\003\022" +
-      "\t\n\005EINTR\020\004\022\007\n\003EIO\020\005\022\t\n\005ENXIO\020\006\022\t\n\005E2BIG\020" +
-      "\007\022\013\n\007ENOEXEC\020\010\022\t\n\005EBADF\020\t\022\n\n\006ECHILD\020\n\022\n\n" +
-      "\006EAGAIN\020\013\022\n\n\006ENOMEM\020\014\022\n\n\006EACCES\020\r\022\n\n\006EFA" +
-      "ULT\020\016\022\013\n\007ENOTBLK\020\017\022\t\n\005EBUSY\020\020\022\n\n\006EEXIST\020" +
-      "\021\022\t\n\005EXDEV\020\022\022\n\n\006ENODEV\020\023\022\013\n\007ENOTDIR\020\024\022\n\n" +
-      "\006EISDIR\020\025\022\n\n\006EINVAL\020\026\022\n\n\006ENFILE\020\027\022\n\n\006EMF" +
-      "ILE\020\030\022\n\n\006ENOTTY\020\031\022\013\n\007ETXTBSY\020\032\022\t\n\005EFBIG\020" +
-      "\033\022\n\n\006ENOSPC\020\034\022\n\n\006ESPIPE\020\035\022\t\n\005EROFS\020\036\022\n\n\006" +
-      "EMLINK\020\037\022\t\n\005EPIPE\020 \022\010\n\004EDOM\020!\022\n\n\006ERANGE\020" +
-      "\"\022\013\n\007EDEADLK\020#\022\020\n\014ENAMETOOLONG\020$\022\n\n\006ENOL" +
-      "CK\020%\022\n\n\006ENOSYS\020&\022\r\n\tENOTEMPTY\020\'\022\t\n\005ELOOP" +
-      "\020(\022\017\n\013EWOULDBLOCK\020)\022\n\n\006ENOMSG\020*\022\t\n\005EIDRM" +
-      "\020+\022\n\n\006ECHRNG\020,\022\014\n\010EL2NSYNC\020-\022\n\n\006EL3HLT\020." +
-      "\022\n\n\006EL3RST\020/\022\n\n\006ELNRNG\0200\022\013\n\007EUNATCH\0201\022\n\n" +
-      "\006ENOCSI\0202\022\n\n\006EL2HLT\0203\022\t\n\005EBADE\0204\022\t\n\005EBAD" +
-      "R\0205\022\n\n\006EXFULL\0206\022\n\n\006ENOANO\0207\022\013\n\007EBADRQC\0208" +
-      "\022\013\n\007EBADSLT\0209\022\r\n\tEDEADLOCK\020:\022\n\n\006EBFONT\020;" +
-      "\022\n\n\006ENOSTR\020<\022\013\n\007ENODATA\020=\022\t\n\005ETIME\020>\022\t\n\005" +
-      "ENOSR\020?\022\n\n\006ENONET\020@\022\n\n\006ENOPKG\020A\022\013\n\007EREMO" +
-      "TE\020B\022\013\n\007ENOLINK\020C\022\010\n\004EADV\020D\022\n\n\006ESRMNT\020E\022" +
-      "\t\n\005ECOMM\020F\022\n\n\006EPROTO\020G\022\r\n\tEMULTIHOP\020H\022\013\n" +
-      "\007EDOTDOT\020I\022\013\n\007EBADMSG\020J\022\r\n\tEOVERFLOW\020K\022\014" +
-      "\n\010ENOTUNIQ\020L\022\n\n\006EBADFD\020M\022\013\n\007EREMCHG\020N\022\013\n" +
-      "\007ELIBACC\020O\022\013\n\007ELIBBAD\020P\022\013\n\007ELIBSCN\020Q\022\013\n\007" +
-      "ELIBMAX\020R\022\014\n\010ELIBEXEC\020S\022\n\n\006EILSEQ\020T\022\014\n\010E" +
-      "RESTART\020U\022\014\n\010ESTRPIPE\020V\022\n\n\006EUSERS\020W\022\014\n\010E" +
-      "NOTSOCK\020X\022\020\n\014EDESTADDRREQ\020Y\022\014\n\010EMSGSIZE\020" +
-      "Z\022\016\n\nEPROTOTYPE\020[\022\017\n\013ENOPROTOOPT\020\\\022\023\n\017EP" +
-      "ROTONOSUPPORT\020]\022\023\n\017ESOCKTNOSUPPORT\020^\022\016\n\n" +
-      "EOPNOTSUPP\020_\022\020\n\014EPFNOSUPPORT\020`\022\020\n\014EAFNOS" +
-      "UPPORT\020a\022\016\n\nEADDRINUSE\020b\022\021\n\rEADDRNOTAVAI" +
-      "L\020c\022\014\n\010ENETDOWN\020d\022\017\n\013ENETUNREACH\020e\022\r\n\tEN" +
-      "ETRESET\020f\022\020\n\014ECONNABORTED\020g\022\016\n\nECONNRESE" +
-      "T\020h\022\013\n\007ENOBUFS\020i\022\013\n\007EISCONN\020j\022\014\n\010ENOTCON" +
-      "N\020k\022\r\n\tESHUTDOWN\020l\022\020\n\014ETOOMANYREFS\020m\022\r\n\t" +
-      "ETIMEDOUT\020n\022\020\n\014ECONNREFUSED\020o\022\r\n\tEHOSTDO" +
-      "WN\020p\022\020\n\014EHOSTUNREACH\020q\022\014\n\010EALREADY\020r\022\017\n\013" +
-      "EINPROGRESS\020s\022\n\n\006ESTALE\020t\022\013\n\007EUCLEAN\020u\022\013" +
-      "\n\007ENOTNAM\020v\022\013\n\007ENAVAIL\020w\022\n\n\006EISNAM\020x\022\r\n\t" +
-      "EREMOTEIO\020yB0Z.github.com/opendedup/sdfs" +
-      "-client-go/sdfs/;sdfsb\006proto3"
+      "tGuid\030\004 \001(\t\022\021\n\tpvolumeID\030\005 \001(\003\"\353\001\n\023FileM" +
+      "essageResponse\022\r\n\005error\030\001 \001(\t\022\020\n\010listGui" +
+      "d\030\002 \001(\t\0226\n\010response\030\003 \003(\0132$.org.opendedu" +
+      "p.grpc.FileInfoResponse\0221\n\terrorCode\030\004 \001" +
+      "(\0162\036.org.opendedup.grpc.errorCodes\022\030\n\020ma" +
+      "xNumberOfFiles\030\005 \001(\005\022.\n\006action\030\006 \001(\0162\036.o" +
+      "rg.opendedup.grpc.syncaction\"\247\006\n\020FileInf" +
+      "oResponse\022\020\n\010fileName\030\001 \001(\t\022\020\n\010filePath\030" +
+      "\002 \001(\t\022;\n\004type\030\003 \001(\0162-.org.opendedup.grpc" +
+      ".FileInfoResponse.fileType\022\020\n\010sdfsPath\030\004" +
+      " \001(\t\022\r\n\005atime\030\005 \001(\003\022\r\n\005mtime\030\006 \001(\003\022\r\n\005ct" +
+      "ime\030\007 \001(\003\022\016\n\006hidden\030\010 \001(\010\022\014\n\004size\030\t \001(\003\022" +
+      "\014\n\004open\030\n \001(\010\022\021\n\tfileGuild\030\013 \001(\t\022\017\n\007mapG" +
+      "uid\030\014 \001(\t\022\022\n\nlocalOwner\030\r \001(\010\022\017\n\007execute" +
+      "\030\016 \001(\010\022\014\n\004read\030\017 \001(\010\022\r\n\005write\030\020 \001(\010\022\021\n\ti" +
+      "mporting\030\021 \001(\010\022\017\n\007symlink\030\022 \001(\010\022:\n\016fileA" +
+      "ttributes\030\023 \003(\0132\".org.opendedup.grpc.Fil" +
+      "eAttributes\022\n\n\002id\030\024 \001(\t\0223\n\005files\030\025 \003(\0132$" +
+      ".org.opendedup.grpc.FileInfoResponse\022\022\n\n" +
+      "parentPath\030\026 \001(\t\022\021\n\tpvolumeID\030\027 \001(\003\0228\n\ti" +
+      "oMonitor\030\030 \001(\0132%.org.opendedup.grpc.IOMo" +
+      "nitorResponse\022\023\n\013symlinkPath\030\031 \001(\t\022\020\n\010gr" +
+      "oup_id\030\032 \001(\003\022\017\n\007user_id\030\033 \001(\003\022\023\n\013permiss" +
+      "ions\030\034 \001(\005\022\020\n\010hashcode\030\035 \001(\003\022\025\n\rretentio" +
+      "nLock\030\036 \001(\003\022\022\n\nattributes\030\037 \001(\003\022\017\n\007versi" +
+      "on\030  \001(\t\022\014\n\004mode\030! \001(\005\022\027\n\017delete_on_clos" +
+      "e\030\" \001(\010\"\035\n\010fileType\022\010\n\004FILE\020\000\022\007\n\003DIR\020\001\"\347" +
+      "\002\n\021IOMonitorResponse\022\033\n\023virtualBytesWrit" +
+      "ten\030\001 \001(\003\022\032\n\022actualBytesWritten\030\002 \001(\003\022\021\n" +
+      "\tbytesRead\030\003 \001(\003\022\027\n\017duplicateBlocks\030\004 \001(" +
+      "\003\022\021\n\twriteOpts\030\005 \001(\003\022\020\n\010readOpts\030\006 \001(\003\022\022" +
+      "\n\nmaxReadOps\030\007 \001(\003\022\023\n\013maxWriteOps\030\010 \001(\003\022" +
+      "\017\n\007maxIops\030\t \001(\003\022\023\n\013maxReadMbps\030\n \001(\003\022\024\n" +
+      "\014maxWriteMbps\030\013 \001(\003\022\017\n\007maxMbps\030\014 \001(\003\022\r\n\005" +
+      "ioQos\030\r \001(\005\022\021\n\tioProfile\030\016 \001(\t\022\017\n\007maxRbp" +
+      "s\030\017 \001(\003\022\017\n\007maxWbps\030\020 \001(\003\022\016\n\006maxBps\030\021 \001(\003" +
+      "\"y\n\026WFileAttributesRequest\022:\n\016fileAttrib" +
+      "utes\030\001 \003(\0132\".org.opendedup.grpc.FileAttr" +
+      "ibutes\022\020\n\010filePath\030\002 \001(\t\022\021\n\tpvolumeID\030\003 " +
+      "\001(\003\"[\n\027WFileAttributesResponse\022\r\n\005error\030" +
+      "\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.org.opendedup" +
+      ".grpc.errorCodes\"=\n\026RFileAttributesReque" +
+      "st\022\020\n\010filePath\030\001 \001(\t\022\021\n\tpvolumeID\030\002 \001(\003\"" +
+      "\227\001\n\027RFileAttributesResponse\022:\n\016fileAttri" +
+      "butes\030\001 \003(\0132\".org.opendedup.grpc.FileAtt" +
+      "ributes\022\r\n\005error\030\002 \001(\t\0221\n\terrorCode\030\003 \001(" +
+      "\0162\036.org.opendedup.grpc.errorCodes\",\n\016Fil" +
+      "eAttributes\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t*" +
+      "L\n\nsyncaction\022\014\n\010DOWNLOAD\020\000\022\t\n\005WRITE\020\001\022\n" +
+      "\n\006DELETE\020\002\022\n\n\006UPLOAD\020\003\022\r\n\tKEEPALIVE\020\004*\335\014" +
+      "\n\nerrorCodes\022\t\n\005NOERR\020\000\022\t\n\005EPERM\020\001\022\n\n\006EN" +
+      "OENT\020\002\022\t\n\005ESRCH\020\003\022\t\n\005EINTR\020\004\022\007\n\003EIO\020\005\022\t\n" +
+      "\005ENXIO\020\006\022\t\n\005E2BIG\020\007\022\013\n\007ENOEXEC\020\010\022\t\n\005EBAD" +
+      "F\020\t\022\n\n\006ECHILD\020\n\022\n\n\006EAGAIN\020\013\022\n\n\006ENOMEM\020\014\022" +
+      "\n\n\006EACCES\020\r\022\n\n\006EFAULT\020\016\022\013\n\007ENOTBLK\020\017\022\t\n\005" +
+      "EBUSY\020\020\022\n\n\006EEXIST\020\021\022\t\n\005EXDEV\020\022\022\n\n\006ENODEV" +
+      "\020\023\022\013\n\007ENOTDIR\020\024\022\n\n\006EISDIR\020\025\022\n\n\006EINVAL\020\026\022" +
+      "\n\n\006ENFILE\020\027\022\n\n\006EMFILE\020\030\022\n\n\006ENOTTY\020\031\022\013\n\007E" +
+      "TXTBSY\020\032\022\t\n\005EFBIG\020\033\022\n\n\006ENOSPC\020\034\022\n\n\006ESPIP" +
+      "E\020\035\022\t\n\005EROFS\020\036\022\n\n\006EMLINK\020\037\022\t\n\005EPIPE\020 \022\010\n" +
+      "\004EDOM\020!\022\n\n\006ERANGE\020\"\022\013\n\007EDEADLK\020#\022\020\n\014ENAM" +
+      "ETOOLONG\020$\022\n\n\006ENOLCK\020%\022\n\n\006ENOSYS\020&\022\r\n\tEN" +
+      "OTEMPTY\020\'\022\t\n\005ELOOP\020(\022\017\n\013EWOULDBLOCK\020)\022\n\n" +
+      "\006ENOMSG\020*\022\t\n\005EIDRM\020+\022\n\n\006ECHRNG\020,\022\014\n\010EL2N" +
+      "SYNC\020-\022\n\n\006EL3HLT\020.\022\n\n\006EL3RST\020/\022\n\n\006ELNRNG" +
+      "\0200\022\013\n\007EUNATCH\0201\022\n\n\006ENOCSI\0202\022\n\n\006EL2HLT\0203\022" +
+      "\t\n\005EBADE\0204\022\t\n\005EBADR\0205\022\n\n\006EXFULL\0206\022\n\n\006ENO" +
+      "ANO\0207\022\013\n\007EBADRQC\0208\022\013\n\007EBADSLT\0209\022\r\n\tEDEAD" +
+      "LOCK\020:\022\n\n\006EBFONT\020;\022\n\n\006ENOSTR\020<\022\013\n\007ENODAT" +
+      "A\020=\022\t\n\005ETIME\020>\022\t\n\005ENOSR\020?\022\n\n\006ENONET\020@\022\n\n" +
+      "\006ENOPKG\020A\022\013\n\007EREMOTE\020B\022\013\n\007ENOLINK\020C\022\010\n\004E" +
+      "ADV\020D\022\n\n\006ESRMNT\020E\022\t\n\005ECOMM\020F\022\n\n\006EPROTO\020G" +
+      "\022\r\n\tEMULTIHOP\020H\022\013\n\007EDOTDOT\020I\022\013\n\007EBADMSG\020" +
+      "J\022\r\n\tEOVERFLOW\020K\022\014\n\010ENOTUNIQ\020L\022\n\n\006EBADFD" +
+      "\020M\022\013\n\007EREMCHG\020N\022\013\n\007ELIBACC\020O\022\013\n\007ELIBBAD\020" +
+      "P\022\013\n\007ELIBSCN\020Q\022\013\n\007ELIBMAX\020R\022\014\n\010ELIBEXEC\020" +
+      "S\022\n\n\006EILSEQ\020T\022\014\n\010ERESTART\020U\022\014\n\010ESTRPIPE\020" +
+      "V\022\n\n\006EUSERS\020W\022\014\n\010ENOTSOCK\020X\022\020\n\014EDESTADDR" +
+      "REQ\020Y\022\014\n\010EMSGSIZE\020Z\022\016\n\nEPROTOTYPE\020[\022\017\n\013E" +
+      "NOPROTOOPT\020\\\022\023\n\017EPROTONOSUPPORT\020]\022\023\n\017ESO" +
+      "CKTNOSUPPORT\020^\022\016\n\nEOPNOTSUPP\020_\022\020\n\014EPFNOS" +
+      "UPPORT\020`\022\020\n\014EAFNOSUPPORT\020a\022\016\n\nEADDRINUSE" +
+      "\020b\022\021\n\rEADDRNOTAVAIL\020c\022\014\n\010ENETDOWN\020d\022\017\n\013E" +
+      "NETUNREACH\020e\022\r\n\tENETRESET\020f\022\020\n\014ECONNABOR" +
+      "TED\020g\022\016\n\nECONNRESET\020h\022\013\n\007ENOBUFS\020i\022\013\n\007EI" +
+      "SCONN\020j\022\014\n\010ENOTCONN\020k\022\r\n\tESHUTDOWN\020l\022\020\n\014" +
+      "ETOOMANYREFS\020m\022\r\n\tETIMEDOUT\020n\022\020\n\014ECONNRE" +
+      "FUSED\020o\022\r\n\tEHOSTDOWN\020p\022\020\n\014EHOSTUNREACH\020q" +
+      "\022\014\n\010EALREADY\020r\022\017\n\013EINPROGRESS\020s\022\n\n\006ESTAL" +
+      "E\020t\022\013\n\007EUCLEAN\020u\022\013\n\007ENOTNAM\020v\022\013\n\007ENAVAIL" +
+      "\020w\022\n\n\006EISNAM\020x\022\r\n\tEREMOTEIO\020yB0Z.github." +
+      "com/opendedup/sdfs-client-go/sdfs/;sdfsb" +
+      "\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
@@ -14905,7 +15041,7 @@ public org.opendedup.grpc.FileInfo.FileAttributes getDefaultInstanceForType() {
     internal_static_org_opendedup_grpc_FileInfoRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_FileInfoRequest_descriptor,
-        new java.lang.String[] { "FileName", "Compact", "NumberOfFiles", "ListGuid", });
+        new java.lang.String[] { "FileName", "Compact", "NumberOfFiles", "ListGuid", "PvolumeID", });
     internal_static_org_opendedup_grpc_FileMessageResponse_descriptor =
       getDescriptor().getMessageTypes().get(1);
     internal_static_org_opendedup_grpc_FileMessageResponse_fieldAccessorTable = new
@@ -14917,7 +15053,7 @@ public org.opendedup.grpc.FileInfo.FileAttributes getDefaultInstanceForType() {
     internal_static_org_opendedup_grpc_FileInfoResponse_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_FileInfoResponse_descriptor,
-        new java.lang.String[] { "FileName", "FilePath", "Type", "SdfsPath", "Atime", "Mtime", "Ctime", "Hidden", "Size", "Open", "FileGuild", "MapGuid", "LocalOwner", "Execute", "Read", "Write", "Importing", "Symlink", "FileAttributes", "Id", "Files", "ParentPath", "Volumeid", "IoMonitor", "SymlinkPath", "GroupId", "UserId", "Permissions", "Hashcode", "RetentionLock", "Attributes", "Version", "Mode", "DeleteOnClose", });
+        new java.lang.String[] { "FileName", "FilePath", "Type", "SdfsPath", "Atime", "Mtime", "Ctime", "Hidden", "Size", "Open", "FileGuild", "MapGuid", "LocalOwner", "Execute", "Read", "Write", "Importing", "Symlink", "FileAttributes", "Id", "Files", "ParentPath", "PvolumeID", "IoMonitor", "SymlinkPath", "GroupId", "UserId", "Permissions", "Hashcode", "RetentionLock", "Attributes", "Version", "Mode", "DeleteOnClose", });
     internal_static_org_opendedup_grpc_IOMonitorResponse_descriptor =
       getDescriptor().getMessageTypes().get(3);
     internal_static_org_opendedup_grpc_IOMonitorResponse_fieldAccessorTable = new
@@ -14929,7 +15065,7 @@ public org.opendedup.grpc.FileInfo.FileAttributes getDefaultInstanceForType() {
     internal_static_org_opendedup_grpc_WFileAttributesRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_WFileAttributesRequest_descriptor,
-        new java.lang.String[] { "FileAttributes", "FilePath", });
+        new java.lang.String[] { "FileAttributes", "FilePath", "PvolumeID", });
     internal_static_org_opendedup_grpc_WFileAttributesResponse_descriptor =
       getDescriptor().getMessageTypes().get(5);
     internal_static_org_opendedup_grpc_WFileAttributesResponse_fieldAccessorTable = new
@@ -14941,7 +15077,7 @@ public org.opendedup.grpc.FileInfo.FileAttributes getDefaultInstanceForType() {
     internal_static_org_opendedup_grpc_RFileAttributesRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_RFileAttributesRequest_descriptor,
-        new java.lang.String[] { "FilePath", });
+        new java.lang.String[] { "FilePath", "PvolumeID", });
     internal_static_org_opendedup_grpc_RFileAttributesResponse_descriptor =
       getDescriptor().getMessageTypes().get(7);
     internal_static_org_opendedup_grpc_RFileAttributesResponse_fieldAccessorTable = new
diff --git a/src/org/opendedup/grpc/IOService.java b/src/org/opendedup/grpc/IOService.java
index 9d3522334..013cc73b3 100644
--- a/src/org/opendedup/grpc/IOService.java
+++ b/src/org/opendedup/grpc/IOService.java
@@ -41,6 +41,18 @@ public interface DataWriteRequestOrBuilder extends
      * @return The data.
      */
     com.google.protobuf.ByteString getData();
+
+    /**
+     * int64 pvolumeID = 5;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
+
+    /**
+     * bool compressed = 6;
+     * @return The compressed.
+     */
+    boolean getCompressed();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.DataWriteRequest}
@@ -108,6 +120,16 @@ private DataWriteRequest(
               data_ = input.readBytes();
               break;
             }
+            case 40: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
+            case 48: {
+
+              compressed_ = input.readBool();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -184,6 +206,28 @@ public com.google.protobuf.ByteString getData() {
       return data_;
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 5;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 5;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
+    public static final int COMPRESSED_FIELD_NUMBER = 6;
+    private boolean compressed_;
+    /**
+     * bool compressed = 6;
+     * @return The compressed.
+     */
+    @java.lang.Override
+    public boolean getCompressed() {
+      return compressed_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -210,6 +254,12 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (!data_.isEmpty()) {
         output.writeBytes(4, data_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(5, pvolumeID_);
+      }
+      if (compressed_ != false) {
+        output.writeBool(6, compressed_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -235,6 +285,14 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeBytesSize(4, data_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(5, pvolumeID_);
+      }
+      if (compressed_ != false) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(6, compressed_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -258,6 +316,10 @@ public boolean equals(final java.lang.Object obj) {
           != other.getLen()) return false;
       if (!getData()
           .equals(other.getData())) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
+      if (getCompressed()
+          != other.getCompressed()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -279,6 +341,12 @@ public int hashCode() {
       hash = (53 * hash) + getLen();
       hash = (37 * hash) + DATA_FIELD_NUMBER;
       hash = (53 * hash) + getData().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
+      hash = (37 * hash) + COMPRESSED_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getCompressed());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -420,6 +488,10 @@ public Builder clear() {
 
         data_ = com.google.protobuf.ByteString.EMPTY;
 
+        pvolumeID_ = 0L;
+
+        compressed_ = false;
+
         return this;
       }
 
@@ -450,6 +522,8 @@ public org.opendedup.grpc.IOService.DataWriteRequest buildPartial() {
         result.start_ = start_;
         result.len_ = len_;
         result.data_ = data_;
+        result.pvolumeID_ = pvolumeID_;
+        result.compressed_ = compressed_;
         onBuilt();
         return result;
       }
@@ -510,6 +584,12 @@ public Builder mergeFrom(org.opendedup.grpc.IOService.DataWriteRequest other) {
         if (other.getData() != com.google.protobuf.ByteString.EMPTY) {
           setData(other.getData());
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
+        if (other.getCompressed() != false) {
+          setCompressed(other.getCompressed());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -665,6 +745,68 @@ public Builder clearData() {
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 5;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 5;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 5;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
+
+      private boolean compressed_ ;
+      /**
+       * bool compressed = 6;
+       * @return The compressed.
+       */
+      @java.lang.Override
+      public boolean getCompressed() {
+        return compressed_;
+      }
+      /**
+       * bool compressed = 6;
+       * @param value The compressed to set.
+       * @return This builder for chaining.
+       */
+      public Builder setCompressed(boolean value) {
+        
+        compressed_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * bool compressed = 6;
+       * @return This builder for chaining.
+       */
+      public Builder clearCompressed() {
+        
+        compressed_ = false;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -744,6 +886,12 @@ public interface DataWriteResponseOrBuilder extends
      * @return The errorCode.
      */
     org.opendedup.grpc.FileInfo.errorCodes getErrorCode();
+
+    /**
+     * int64 written = 3;
+     * @return The written.
+     */
+    long getWritten();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.DataWriteResponse}
@@ -804,6 +952,11 @@ private DataWriteResponse(
               errorCode_ = rawValue;
               break;
             }
+            case 24: {
+
+              written_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -893,6 +1046,17 @@ public java.lang.String getError() {
       return result == null ? org.opendedup.grpc.FileInfo.errorCodes.UNRECOGNIZED : result;
     }
 
+    public static final int WRITTEN_FIELD_NUMBER = 3;
+    private long written_;
+    /**
+     * int64 written = 3;
+     * @return The written.
+     */
+    @java.lang.Override
+    public long getWritten() {
+      return written_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -913,6 +1077,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (errorCode_ != org.opendedup.grpc.FileInfo.errorCodes.NOERR.getNumber()) {
         output.writeEnum(2, errorCode_);
       }
+      if (written_ != 0L) {
+        output.writeInt64(3, written_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -929,6 +1096,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeEnumSize(2, errorCode_);
       }
+      if (written_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(3, written_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -947,6 +1118,8 @@ public boolean equals(final java.lang.Object obj) {
       if (!getError()
           .equals(other.getError())) return false;
       if (errorCode_ != other.errorCode_) return false;
+      if (getWritten()
+          != other.getWritten()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -962,6 +1135,9 @@ public int hashCode() {
       hash = (53 * hash) + getError().hashCode();
       hash = (37 * hash) + ERRORCODE_FIELD_NUMBER;
       hash = (53 * hash) + errorCode_;
+      hash = (37 * hash) + WRITTEN_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getWritten());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -1099,6 +1275,8 @@ public Builder clear() {
 
         errorCode_ = 0;
 
+        written_ = 0L;
+
         return this;
       }
 
@@ -1127,6 +1305,7 @@ public org.opendedup.grpc.IOService.DataWriteResponse buildPartial() {
         org.opendedup.grpc.IOService.DataWriteResponse result = new org.opendedup.grpc.IOService.DataWriteResponse(this);
         result.error_ = error_;
         result.errorCode_ = errorCode_;
+        result.written_ = written_;
         onBuilt();
         return result;
       }
@@ -1182,6 +1361,9 @@ public Builder mergeFrom(org.opendedup.grpc.IOService.DataWriteResponse other) {
         if (other.errorCode_ != 0) {
           setErrorCodeValue(other.getErrorCodeValue());
         }
+        if (other.getWritten() != 0L) {
+          setWritten(other.getWritten());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -1340,6 +1522,37 @@ public Builder clearErrorCode() {
         onChanged();
         return this;
       }
+
+      private long written_ ;
+      /**
+       * int64 written = 3;
+       * @return The written.
+       */
+      @java.lang.Override
+      public long getWritten() {
+        return written_;
+      }
+      /**
+       * int64 written = 3;
+       * @param value The written to set.
+       * @return This builder for chaining.
+       */
+      public Builder setWritten(long value) {
+        
+        written_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 written = 3;
+       * @return This builder for chaining.
+       */
+      public Builder clearWritten() {
+        
+        written_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -1414,6 +1627,12 @@ public interface MkDirRequestOrBuilder extends
      * @return The mode.
      */
     int getMode();
+
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.MkDirRequest}
@@ -1472,6 +1691,11 @@ private MkDirRequest(
               mode_ = input.readInt32();
               break;
             }
+            case 24: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -1553,6 +1777,17 @@ public int getMode() {
       return mode_;
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 3;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -1573,6 +1808,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (mode_ != 0) {
         output.writeInt32(2, mode_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(3, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -1589,6 +1827,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeInt32Size(2, mode_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(3, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -1608,6 +1850,8 @@ public boolean equals(final java.lang.Object obj) {
           .equals(other.getPath())) return false;
       if (getMode()
           != other.getMode()) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -1623,6 +1867,9 @@ public int hashCode() {
       hash = (53 * hash) + getPath().hashCode();
       hash = (37 * hash) + MODE_FIELD_NUMBER;
       hash = (53 * hash) + getMode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -1760,6 +2007,8 @@ public Builder clear() {
 
         mode_ = 0;
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -1788,6 +2037,7 @@ public org.opendedup.grpc.IOService.MkDirRequest buildPartial() {
         org.opendedup.grpc.IOService.MkDirRequest result = new org.opendedup.grpc.IOService.MkDirRequest(this);
         result.path_ = path_;
         result.mode_ = mode_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -1843,6 +2093,9 @@ public Builder mergeFrom(org.opendedup.grpc.IOService.MkDirRequest other) {
         if (other.getMode() != 0) {
           setMode(other.getMode());
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -1978,6 +2231,37 @@ public Builder clearMode() {
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 3;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -2721,6 +3005,12 @@ public interface RmDirRequestOrBuilder extends
      */
     com.google.protobuf.ByteString
         getPathBytes();
+
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.RmDirRequest}
@@ -2774,6 +3064,11 @@ private RmDirRequest(
               path_ = s;
               break;
             }
+            case 16: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -2844,6 +3139,17 @@ public java.lang.String getPath() {
       }
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 2;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -2861,6 +3167,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (!getPathBytes().isEmpty()) {
         com.google.protobuf.GeneratedMessageV3.writeString(output, 1, path_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(2, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -2873,6 +3182,10 @@ public int getSerializedSize() {
       if (!getPathBytes().isEmpty()) {
         size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, path_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(2, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -2890,6 +3203,8 @@ public boolean equals(final java.lang.Object obj) {
 
       if (!getPath()
           .equals(other.getPath())) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -2903,6 +3218,9 @@ public int hashCode() {
       hash = (19 * hash) + getDescriptor().hashCode();
       hash = (37 * hash) + PATH_FIELD_NUMBER;
       hash = (53 * hash) + getPath().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -3038,6 +3356,8 @@ public Builder clear() {
         super.clear();
         path_ = "";
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -3065,6 +3385,7 @@ public org.opendedup.grpc.IOService.RmDirRequest build() {
       public org.opendedup.grpc.IOService.RmDirRequest buildPartial() {
         org.opendedup.grpc.IOService.RmDirRequest result = new org.opendedup.grpc.IOService.RmDirRequest(this);
         result.path_ = path_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -3117,6 +3438,9 @@ public Builder mergeFrom(org.opendedup.grpc.IOService.RmDirRequest other) {
           path_ = other.path_;
           onChanged();
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -3221,6 +3545,37 @@ public Builder setPathBytes(
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 2;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -3964,6 +4319,12 @@ public interface UnlinkRequestOrBuilder extends
      */
     com.google.protobuf.ByteString
         getPathBytes();
+
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.UnlinkRequest}
@@ -4017,6 +4378,11 @@ private UnlinkRequest(
               path_ = s;
               break;
             }
+            case 16: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -4087,6 +4453,17 @@ public java.lang.String getPath() {
       }
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 2;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -4104,6 +4481,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (!getPathBytes().isEmpty()) {
         com.google.protobuf.GeneratedMessageV3.writeString(output, 1, path_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(2, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -4116,6 +4496,10 @@ public int getSerializedSize() {
       if (!getPathBytes().isEmpty()) {
         size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, path_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(2, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -4133,6 +4517,8 @@ public boolean equals(final java.lang.Object obj) {
 
       if (!getPath()
           .equals(other.getPath())) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -4146,6 +4532,9 @@ public int hashCode() {
       hash = (19 * hash) + getDescriptor().hashCode();
       hash = (37 * hash) + PATH_FIELD_NUMBER;
       hash = (53 * hash) + getPath().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -4281,6 +4670,8 @@ public Builder clear() {
         super.clear();
         path_ = "";
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -4308,6 +4699,7 @@ public org.opendedup.grpc.IOService.UnlinkRequest build() {
       public org.opendedup.grpc.IOService.UnlinkRequest buildPartial() {
         org.opendedup.grpc.IOService.UnlinkRequest result = new org.opendedup.grpc.IOService.UnlinkRequest(this);
         result.path_ = path_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -4360,6 +4752,9 @@ public Builder mergeFrom(org.opendedup.grpc.IOService.UnlinkRequest other) {
           path_ = other.path_;
           onChanged();
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -4464,6 +4859,37 @@ public Builder setPathBytes(
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 2;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -5213,6 +5639,18 @@ public interface DataReadRequestOrBuilder extends
      * @return The len.
      */
     int getLen();
+
+    /**
+     * int64 pvolumeID = 4;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
+
+    /**
+     * bool compress = 5;
+     * @return The compress.
+     */
+    boolean getCompress();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.DataReadRequest}
@@ -5274,6 +5712,16 @@ private DataReadRequest(
               len_ = input.readInt32();
               break;
             }
+            case 32: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
+            case 40: {
+
+              compress_ = input.readBool();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -5339,6 +5787,28 @@ public int getLen() {
       return len_;
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 4;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 4;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
+    public static final int COMPRESS_FIELD_NUMBER = 5;
+    private boolean compress_;
+    /**
+     * bool compress = 5;
+     * @return The compress.
+     */
+    @java.lang.Override
+    public boolean getCompress() {
+      return compress_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -5362,6 +5832,12 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (len_ != 0) {
         output.writeInt32(3, len_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(4, pvolumeID_);
+      }
+      if (compress_ != false) {
+        output.writeBool(5, compress_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -5383,6 +5859,14 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeInt32Size(3, len_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(4, pvolumeID_);
+      }
+      if (compress_ != false) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(5, compress_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -5404,6 +5888,10 @@ public boolean equals(final java.lang.Object obj) {
           != other.getStart()) return false;
       if (getLen()
           != other.getLen()) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
+      if (getCompress()
+          != other.getCompress()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -5423,6 +5911,12 @@ public int hashCode() {
           getStart());
       hash = (37 * hash) + LEN_FIELD_NUMBER;
       hash = (53 * hash) + getLen();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
+      hash = (37 * hash) + COMPRESS_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getCompress());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -5562,6 +6056,10 @@ public Builder clear() {
 
         len_ = 0;
 
+        pvolumeID_ = 0L;
+
+        compress_ = false;
+
         return this;
       }
 
@@ -5591,6 +6089,8 @@ public org.opendedup.grpc.IOService.DataReadRequest buildPartial() {
         result.fileHandle_ = fileHandle_;
         result.start_ = start_;
         result.len_ = len_;
+        result.pvolumeID_ = pvolumeID_;
+        result.compress_ = compress_;
         onBuilt();
         return result;
       }
@@ -5648,6 +6148,12 @@ public Builder mergeFrom(org.opendedup.grpc.IOService.DataReadRequest other) {
         if (other.getLen() != 0) {
           setLen(other.getLen());
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
+        if (other.getCompress() != false) {
+          setCompress(other.getCompress());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -5769,6 +6275,68 @@ public Builder clearLen() {
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 4;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 4;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 4;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
+
+      private boolean compress_ ;
+      /**
+       * bool compress = 5;
+       * @return The compress.
+       */
+      @java.lang.Override
+      public boolean getCompress() {
+        return compress_;
+      }
+      /**
+       * bool compress = 5;
+       * @param value The compress to set.
+       * @return This builder for chaining.
+       */
+      public Builder setCompress(boolean value) {
+        
+        compress_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * bool compress = 5;
+       * @return This builder for chaining.
+       */
+      public Builder clearCompress() {
+        
+        compress_ = false;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -5860,6 +6428,12 @@ public interface DataReadResponseOrBuilder extends
      * @return The errorCode.
      */
     org.opendedup.grpc.FileInfo.errorCodes getErrorCode();
+
+    /**
+     * bool compressed = 5;
+     * @return The compressed.
+     */
+    boolean getCompressed();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.DataReadResponse}
@@ -5931,6 +6505,11 @@ private DataReadResponse(
               errorCode_ = rawValue;
               break;
             }
+            case 40: {
+
+              compressed_ = input.readBool();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -6042,6 +6621,17 @@ public java.lang.String getError() {
       return result == null ? org.opendedup.grpc.FileInfo.errorCodes.UNRECOGNIZED : result;
     }
 
+    public static final int COMPRESSED_FIELD_NUMBER = 5;
+    private boolean compressed_;
+    /**
+     * bool compressed = 5;
+     * @return The compressed.
+     */
+    @java.lang.Override
+    public boolean getCompressed() {
+      return compressed_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -6068,6 +6658,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (errorCode_ != org.opendedup.grpc.FileInfo.errorCodes.NOERR.getNumber()) {
         output.writeEnum(4, errorCode_);
       }
+      if (compressed_ != false) {
+        output.writeBool(5, compressed_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -6092,6 +6685,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeEnumSize(4, errorCode_);
       }
+      if (compressed_ != false) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(5, compressed_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -6114,6 +6711,8 @@ public boolean equals(final java.lang.Object obj) {
       if (!getError()
           .equals(other.getError())) return false;
       if (errorCode_ != other.errorCode_) return false;
+      if (getCompressed()
+          != other.getCompressed()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -6133,6 +6732,9 @@ public int hashCode() {
       hash = (53 * hash) + getError().hashCode();
       hash = (37 * hash) + ERRORCODE_FIELD_NUMBER;
       hash = (53 * hash) + errorCode_;
+      hash = (37 * hash) + COMPRESSED_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getCompressed());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -6274,6 +6876,8 @@ public Builder clear() {
 
         errorCode_ = 0;
 
+        compressed_ = false;
+
         return this;
       }
 
@@ -6304,6 +6908,7 @@ public org.opendedup.grpc.IOService.DataReadResponse buildPartial() {
         result.read_ = read_;
         result.error_ = error_;
         result.errorCode_ = errorCode_;
+        result.compressed_ = compressed_;
         onBuilt();
         return result;
       }
@@ -6365,6 +6970,9 @@ public Builder mergeFrom(org.opendedup.grpc.IOService.DataReadResponse other) {
         if (other.errorCode_ != 0) {
           setErrorCodeValue(other.getErrorCodeValue());
         }
+        if (other.getCompressed() != false) {
+          setCompressed(other.getCompressed());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -6588,6 +7196,37 @@ public Builder clearErrorCode() {
         onChanged();
         return this;
       }
+
+      private boolean compressed_ ;
+      /**
+       * bool compressed = 5;
+       * @return The compressed.
+       */
+      @java.lang.Override
+      public boolean getCompressed() {
+        return compressed_;
+      }
+      /**
+       * bool compressed = 5;
+       * @param value The compressed to set.
+       * @return This builder for chaining.
+       */
+      public Builder setCompressed(boolean value) {
+        
+        compressed_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * bool compressed = 5;
+       * @return This builder for chaining.
+       */
+      public Builder clearCompressed() {
+        
+        compressed_ = false;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -6650,6 +7289,12 @@ public interface FileCloseRequestOrBuilder extends
      * @return The fileHandle.
      */
     long getFileHandle();
+
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.FileCloseRequest}
@@ -6701,6 +7346,11 @@ private FileCloseRequest(
               fileHandle_ = input.readInt64();
               break;
             }
+            case 16: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -6744,6 +7394,17 @@ public long getFileHandle() {
       return fileHandle_;
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 2;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -6761,6 +7422,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (fileHandle_ != 0L) {
         output.writeInt64(1, fileHandle_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(2, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -6774,6 +7438,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeInt64Size(1, fileHandle_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(2, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -6791,6 +7459,8 @@ public boolean equals(final java.lang.Object obj) {
 
       if (getFileHandle()
           != other.getFileHandle()) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -6805,6 +7475,9 @@ public int hashCode() {
       hash = (37 * hash) + FILEHANDLE_FIELD_NUMBER;
       hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
           getFileHandle());
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -6940,6 +7613,8 @@ public Builder clear() {
         super.clear();
         fileHandle_ = 0L;
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -6967,6 +7642,7 @@ public org.opendedup.grpc.IOService.FileCloseRequest build() {
       public org.opendedup.grpc.IOService.FileCloseRequest buildPartial() {
         org.opendedup.grpc.IOService.FileCloseRequest result = new org.opendedup.grpc.IOService.FileCloseRequest(this);
         result.fileHandle_ = fileHandle_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -7018,6 +7694,9 @@ public Builder mergeFrom(org.opendedup.grpc.IOService.FileCloseRequest other) {
         if (other.getFileHandle() != 0L) {
           setFileHandle(other.getFileHandle());
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -7077,6 +7756,37 @@ public Builder clearFileHandle() {
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 2;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -7832,6 +8542,12 @@ public interface MkNodRequestOrBuilder extends
      * @return The rdev.
      */
     int getRdev();
+
+    /**
+     * int64 pvolumeID = 4;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.MkNodRequest}
@@ -7895,6 +8611,11 @@ private MkNodRequest(
               rdev_ = input.readInt32();
               break;
             }
+            case 32: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -7987,6 +8708,17 @@ public int getRdev() {
       return rdev_;
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 4;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 4;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -8010,6 +8742,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (rdev_ != 0) {
         output.writeInt32(3, rdev_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(4, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -8030,6 +8765,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeInt32Size(3, rdev_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(4, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -8051,6 +8790,8 @@ public boolean equals(final java.lang.Object obj) {
           != other.getMode()) return false;
       if (getRdev()
           != other.getRdev()) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -8068,6 +8809,9 @@ public int hashCode() {
       hash = (53 * hash) + getMode();
       hash = (37 * hash) + RDEV_FIELD_NUMBER;
       hash = (53 * hash) + getRdev();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -8207,6 +8951,8 @@ public Builder clear() {
 
         rdev_ = 0;
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -8236,6 +8982,7 @@ public org.opendedup.grpc.IOService.MkNodRequest buildPartial() {
         result.path_ = path_;
         result.mode_ = mode_;
         result.rdev_ = rdev_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -8294,6 +9041,9 @@ public Builder mergeFrom(org.opendedup.grpc.IOService.MkNodRequest other) {
         if (other.getRdev() != 0) {
           setRdev(other.getRdev());
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -8460,6 +9210,37 @@ public Builder clearRdev() {
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 4;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 4;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 4;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -9209,6 +9990,12 @@ public interface FileOpenRequestOrBuilder extends
      * @return The flags.
      */
     int getFlags();
+
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.FileOpenRequest}
@@ -9267,6 +10054,11 @@ private FileOpenRequest(
               flags_ = input.readInt32();
               break;
             }
+            case 24: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -9348,6 +10140,17 @@ public int getFlags() {
       return flags_;
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 3;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -9368,6 +10171,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (flags_ != 0) {
         output.writeInt32(2, flags_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(3, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -9384,6 +10190,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeInt32Size(2, flags_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(3, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -9403,6 +10213,8 @@ public boolean equals(final java.lang.Object obj) {
           .equals(other.getPath())) return false;
       if (getFlags()
           != other.getFlags()) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -9418,6 +10230,9 @@ public int hashCode() {
       hash = (53 * hash) + getPath().hashCode();
       hash = (37 * hash) + FLAGS_FIELD_NUMBER;
       hash = (53 * hash) + getFlags();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -9555,6 +10370,8 @@ public Builder clear() {
 
         flags_ = 0;
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -9583,6 +10400,7 @@ public org.opendedup.grpc.IOService.FileOpenRequest buildPartial() {
         org.opendedup.grpc.IOService.FileOpenRequest result = new org.opendedup.grpc.IOService.FileOpenRequest(this);
         result.path_ = path_;
         result.flags_ = flags_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -9638,6 +10456,9 @@ public Builder mergeFrom(org.opendedup.grpc.IOService.FileOpenRequest other) {
         if (other.getFlags() != 0) {
           setFlags(other.getFlags());
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -9773,6 +10594,37 @@ public Builder clearFlags() {
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 3;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -9841,6 +10693,12 @@ public interface FileExistsRequestOrBuilder extends
      */
     com.google.protobuf.ByteString
         getPathBytes();
+
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.FileExistsRequest}
@@ -9894,6 +10752,11 @@ private FileExistsRequest(
               path_ = s;
               break;
             }
+            case 16: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -9964,6 +10827,17 @@ public java.lang.String getPath() {
       }
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 2;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -9981,6 +10855,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (!getPathBytes().isEmpty()) {
         com.google.protobuf.GeneratedMessageV3.writeString(output, 1, path_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(2, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -9993,6 +10870,10 @@ public int getSerializedSize() {
       if (!getPathBytes().isEmpty()) {
         size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, path_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(2, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -10010,6 +10891,8 @@ public boolean equals(final java.lang.Object obj) {
 
       if (!getPath()
           .equals(other.getPath())) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -10023,6 +10906,9 @@ public int hashCode() {
       hash = (19 * hash) + getDescriptor().hashCode();
       hash = (37 * hash) + PATH_FIELD_NUMBER;
       hash = (53 * hash) + getPath().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -10158,6 +11044,8 @@ public Builder clear() {
         super.clear();
         path_ = "";
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -10185,6 +11073,7 @@ public org.opendedup.grpc.IOService.FileExistsRequest build() {
       public org.opendedup.grpc.IOService.FileExistsRequest buildPartial() {
         org.opendedup.grpc.IOService.FileExistsRequest result = new org.opendedup.grpc.IOService.FileExistsRequest(this);
         result.path_ = path_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -10237,6 +11126,9 @@ public Builder mergeFrom(org.opendedup.grpc.IOService.FileExistsRequest other) {
           path_ = other.path_;
           onChanged();
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -10341,6 +11233,37 @@ public Builder setPathBytes(
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 2;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -10426,6 +11349,12 @@ public interface FileExistsResponseOrBuilder extends
      * @return The errorCode.
      */
     org.opendedup.grpc.FileInfo.errorCodes getErrorCode();
+
+    /**
+     * int64 pvolumeID = 4;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.FileExistsResponse}
@@ -10491,6 +11420,11 @@ private FileExistsResponse(
               errorCode_ = rawValue;
               break;
             }
+            case 32: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -10591,6 +11525,17 @@ public java.lang.String getError() {
       return result == null ? org.opendedup.grpc.FileInfo.errorCodes.UNRECOGNIZED : result;
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 4;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 4;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -10614,6 +11559,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (errorCode_ != org.opendedup.grpc.FileInfo.errorCodes.NOERR.getNumber()) {
         output.writeEnum(3, errorCode_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(4, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -10634,6 +11582,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeEnumSize(3, errorCode_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(4, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -10654,6 +11606,8 @@ public boolean equals(final java.lang.Object obj) {
       if (!getError()
           .equals(other.getError())) return false;
       if (errorCode_ != other.errorCode_) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -10672,6 +11626,9 @@ public int hashCode() {
       hash = (53 * hash) + getError().hashCode();
       hash = (37 * hash) + ERRORCODE_FIELD_NUMBER;
       hash = (53 * hash) + errorCode_;
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -10811,6 +11768,8 @@ public Builder clear() {
 
         errorCode_ = 0;
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -10840,6 +11799,7 @@ public org.opendedup.grpc.IOService.FileExistsResponse buildPartial() {
         result.exists_ = exists_;
         result.error_ = error_;
         result.errorCode_ = errorCode_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -10898,6 +11858,9 @@ public Builder mergeFrom(org.opendedup.grpc.IOService.FileExistsResponse other)
         if (other.errorCode_ != 0) {
           setErrorCodeValue(other.getErrorCodeValue());
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -11087,6 +12050,37 @@ public Builder clearErrorCode() {
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 4;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 4;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 4;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -11913,6 +12907,12 @@ public interface FileSnapshotRequestOrBuilder extends
      */
     com.google.protobuf.ByteString
         getDestBytes();
+
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.FileSnapshotRequest}
@@ -11973,6 +12973,11 @@ private FileSnapshotRequest(
               dest_ = s;
               break;
             }
+            case 24: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -12081,6 +13086,17 @@ public java.lang.String getDest() {
       }
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 3;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -12101,6 +13117,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (!getDestBytes().isEmpty()) {
         com.google.protobuf.GeneratedMessageV3.writeString(output, 2, dest_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(3, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -12116,6 +13135,10 @@ public int getSerializedSize() {
       if (!getDestBytes().isEmpty()) {
         size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, dest_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(3, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -12135,6 +13158,8 @@ public boolean equals(final java.lang.Object obj) {
           .equals(other.getSrc())) return false;
       if (!getDest()
           .equals(other.getDest())) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -12150,6 +13175,9 @@ public int hashCode() {
       hash = (53 * hash) + getSrc().hashCode();
       hash = (37 * hash) + DEST_FIELD_NUMBER;
       hash = (53 * hash) + getDest().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -12287,6 +13315,8 @@ public Builder clear() {
 
         dest_ = "";
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -12315,6 +13345,7 @@ public org.opendedup.grpc.IOService.FileSnapshotRequest buildPartial() {
         org.opendedup.grpc.IOService.FileSnapshotRequest result = new org.opendedup.grpc.IOService.FileSnapshotRequest(this);
         result.src_ = src_;
         result.dest_ = dest_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -12371,6 +13402,9 @@ public Builder mergeFrom(org.opendedup.grpc.IOService.FileSnapshotRequest other)
           dest_ = other.dest_;
           onChanged();
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -12551,6 +13585,37 @@ public Builder setDestBytes(
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 3;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -13456,6 +14521,12 @@ public interface FileRenameRequestOrBuilder extends
      */
     com.google.protobuf.ByteString
         getDestBytes();
+
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.FileRenameRequest}
@@ -13516,6 +14587,11 @@ private FileRenameRequest(
               dest_ = s;
               break;
             }
+            case 24: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -13624,6 +14700,17 @@ public java.lang.String getDest() {
       }
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 3;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -13644,6 +14731,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (!getDestBytes().isEmpty()) {
         com.google.protobuf.GeneratedMessageV3.writeString(output, 2, dest_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(3, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -13659,6 +14749,10 @@ public int getSerializedSize() {
       if (!getDestBytes().isEmpty()) {
         size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, dest_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(3, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -13678,6 +14772,8 @@ public boolean equals(final java.lang.Object obj) {
           .equals(other.getSrc())) return false;
       if (!getDest()
           .equals(other.getDest())) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -13693,6 +14789,9 @@ public int hashCode() {
       hash = (53 * hash) + getSrc().hashCode();
       hash = (37 * hash) + DEST_FIELD_NUMBER;
       hash = (53 * hash) + getDest().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -13830,6 +14929,8 @@ public Builder clear() {
 
         dest_ = "";
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -13858,6 +14959,7 @@ public org.opendedup.grpc.IOService.FileRenameRequest buildPartial() {
         org.opendedup.grpc.IOService.FileRenameRequest result = new org.opendedup.grpc.IOService.FileRenameRequest(this);
         result.src_ = src_;
         result.dest_ = dest_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -13914,6 +15016,9 @@ public Builder mergeFrom(org.opendedup.grpc.IOService.FileRenameRequest other) {
           dest_ = other.dest_;
           onChanged();
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -14094,6 +15199,37 @@ public Builder setDestBytes(
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 3;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -14867,6 +16003,12 @@ public interface CopyExtentRequestOrBuilder extends
      * @return The length.
      */
     long getLength();
+
+    /**
+     * int64 pvolumeID = 6;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.CopyExtentRequest}
@@ -14942,6 +16084,11 @@ private CopyExtentRequest(
               length_ = input.readInt64();
               break;
             }
+            case 48: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -15083,6 +16230,17 @@ public long getLength() {
       return length_;
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 6;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 6;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -15112,6 +16270,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (length_ != 0L) {
         output.writeInt64(5, length_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(6, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -15139,6 +16300,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeInt64Size(5, length_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(6, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -15164,6 +16329,8 @@ public boolean equals(final java.lang.Object obj) {
           != other.getDstStart()) return false;
       if (getLength()
           != other.getLength()) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -15188,6 +16355,9 @@ public int hashCode() {
       hash = (37 * hash) + LENGTH_FIELD_NUMBER;
       hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
           getLength());
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -15331,6 +16501,8 @@ public Builder clear() {
 
         length_ = 0L;
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -15362,6 +16534,7 @@ public org.opendedup.grpc.IOService.CopyExtentRequest buildPartial() {
         result.srcStart_ = srcStart_;
         result.dstStart_ = dstStart_;
         result.length_ = length_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -15427,6 +16600,9 @@ public Builder mergeFrom(org.opendedup.grpc.IOService.CopyExtentRequest other) {
         if (other.getLength() != 0L) {
           setLength(other.getLength());
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -15700,6 +16876,37 @@ public Builder clearLength() {
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 6;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 6;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 6;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -16538,6 +17745,12 @@ org.opendedup.grpc.FileInfo.FileAttributesOrBuilder getFileAttributesOrBuilder(
      */
     com.google.protobuf.ByteString
         getPathBytes();
+
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.SetUserMetaDataRequest}
@@ -16602,6 +17815,11 @@ private SetUserMetaDataRequest(
               path_ = s;
               break;
             }
+            case 24: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -16715,6 +17933,17 @@ public java.lang.String getPath() {
       }
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 3;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -16735,6 +17964,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (!getPathBytes().isEmpty()) {
         com.google.protobuf.GeneratedMessageV3.writeString(output, 2, path_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(3, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -16751,6 +17983,10 @@ public int getSerializedSize() {
       if (!getPathBytes().isEmpty()) {
         size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, path_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(3, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -16770,6 +18006,8 @@ public boolean equals(final java.lang.Object obj) {
           .equals(other.getFileAttributesList())) return false;
       if (!getPath()
           .equals(other.getPath())) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -16787,6 +18025,9 @@ public int hashCode() {
       }
       hash = (37 * hash) + PATH_FIELD_NUMBER;
       hash = (53 * hash) + getPath().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -16929,6 +18170,8 @@ public Builder clear() {
         }
         path_ = "";
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -16966,6 +18209,7 @@ public org.opendedup.grpc.IOService.SetUserMetaDataRequest buildPartial() {
           result.fileAttributes_ = fileAttributesBuilder_.build();
         }
         result.path_ = path_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -17044,6 +18288,9 @@ public Builder mergeFrom(org.opendedup.grpc.IOService.SetUserMetaDataRequest oth
           path_ = other.path_;
           onChanged();
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -17389,6 +18636,37 @@ public Builder setPathBytes(
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 3;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -18162,6 +19440,12 @@ public interface GetCloudFileRequestOrBuilder extends
      */
     com.google.protobuf.ByteString
         getChangeidBytes();
+
+    /**
+     * int64 pvolumeID = 5;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.GetCloudFileRequest}
@@ -18234,6 +19518,11 @@ private GetCloudFileRequest(
               changeid_ = s;
               break;
             }
+            case 40: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -18391,6 +19680,17 @@ public java.lang.String getChangeid() {
       }
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 5;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 5;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -18417,6 +19717,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (!getChangeidBytes().isEmpty()) {
         com.google.protobuf.GeneratedMessageV3.writeString(output, 4, changeid_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(5, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -18439,6 +19742,10 @@ public int getSerializedSize() {
       if (!getChangeidBytes().isEmpty()) {
         size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, changeid_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(5, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -18462,6 +19769,8 @@ public boolean equals(final java.lang.Object obj) {
           != other.getOverwrite()) return false;
       if (!getChangeid()
           .equals(other.getChangeid())) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -18482,6 +19791,9 @@ public int hashCode() {
           getOverwrite());
       hash = (37 * hash) + CHANGEID_FIELD_NUMBER;
       hash = (53 * hash) + getChangeid().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -18623,6 +19935,8 @@ public Builder clear() {
 
         changeid_ = "";
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -18653,6 +19967,7 @@ public org.opendedup.grpc.IOService.GetCloudFileRequest buildPartial() {
         result.dstfile_ = dstfile_;
         result.overwrite_ = overwrite_;
         result.changeid_ = changeid_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -18716,6 +20031,9 @@ public Builder mergeFrom(org.opendedup.grpc.IOService.GetCloudFileRequest other)
           changeid_ = other.changeid_;
           onChanged();
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -19003,6 +20321,37 @@ public Builder setChangeidBytes(
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 5;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 5;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 5;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -19902,6 +21251,12 @@ public interface ChmodRequestOrBuilder extends
      * @return The mode.
      */
     int getMode();
+
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.ChmodRequest}
@@ -19960,6 +21315,11 @@ private ChmodRequest(
               mode_ = input.readInt32();
               break;
             }
+            case 24: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -20041,6 +21401,17 @@ public int getMode() {
       return mode_;
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 3;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -20061,6 +21432,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (mode_ != 0) {
         output.writeInt32(2, mode_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(3, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -20077,6 +21451,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeInt32Size(2, mode_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(3, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -20096,6 +21474,8 @@ public boolean equals(final java.lang.Object obj) {
           .equals(other.getPath())) return false;
       if (getMode()
           != other.getMode()) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -20111,6 +21491,9 @@ public int hashCode() {
       hash = (53 * hash) + getPath().hashCode();
       hash = (37 * hash) + MODE_FIELD_NUMBER;
       hash = (53 * hash) + getMode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -20248,6 +21631,8 @@ public Builder clear() {
 
         mode_ = 0;
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -20276,6 +21661,7 @@ public org.opendedup.grpc.IOService.ChmodRequest buildPartial() {
         org.opendedup.grpc.IOService.ChmodRequest result = new org.opendedup.grpc.IOService.ChmodRequest(this);
         result.path_ = path_;
         result.mode_ = mode_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -20331,6 +21717,9 @@ public Builder mergeFrom(org.opendedup.grpc.IOService.ChmodRequest other) {
         if (other.getMode() != 0) {
           setMode(other.getMode());
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -20466,6 +21855,37 @@ public Builder clearMode() {
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 3;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -21221,6 +22641,12 @@ public interface ChownRequestOrBuilder extends
      * @return The gid.
      */
     int getGid();
+
+    /**
+     * int64 pvolumeID = 4;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.ChownRequest}
@@ -21284,6 +22710,11 @@ private ChownRequest(
               gid_ = input.readInt32();
               break;
             }
+            case 32: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -21376,6 +22807,17 @@ public int getGid() {
       return gid_;
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 4;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 4;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -21399,6 +22841,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (gid_ != 0) {
         output.writeInt32(3, gid_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(4, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -21419,6 +22864,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeInt32Size(3, gid_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(4, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -21440,6 +22889,8 @@ public boolean equals(final java.lang.Object obj) {
           != other.getUid()) return false;
       if (getGid()
           != other.getGid()) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -21457,6 +22908,9 @@ public int hashCode() {
       hash = (53 * hash) + getUid();
       hash = (37 * hash) + GID_FIELD_NUMBER;
       hash = (53 * hash) + getGid();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -21596,6 +23050,8 @@ public Builder clear() {
 
         gid_ = 0;
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -21625,6 +23081,7 @@ public org.opendedup.grpc.IOService.ChownRequest buildPartial() {
         result.path_ = path_;
         result.uid_ = uid_;
         result.gid_ = gid_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -21683,6 +23140,9 @@ public Builder mergeFrom(org.opendedup.grpc.IOService.ChownRequest other) {
         if (other.getGid() != 0) {
           setGid(other.getGid());
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -21849,6 +23309,37 @@ public Builder clearGid() {
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 4;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 4;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 4;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -22598,6 +24089,12 @@ public interface FlushRequestOrBuilder extends
      * @return The fd.
      */
     long getFd();
+
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.FlushRequest}
@@ -22656,6 +24153,11 @@ private FlushRequest(
               fd_ = input.readInt64();
               break;
             }
+            case 24: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -22737,6 +24239,17 @@ public long getFd() {
       return fd_;
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 3;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -22757,6 +24270,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (fd_ != 0L) {
         output.writeInt64(2, fd_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(3, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -22773,6 +24289,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeInt64Size(2, fd_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(3, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -22792,6 +24312,8 @@ public boolean equals(final java.lang.Object obj) {
           .equals(other.getPath())) return false;
       if (getFd()
           != other.getFd()) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -22808,6 +24330,9 @@ public int hashCode() {
       hash = (37 * hash) + FD_FIELD_NUMBER;
       hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
           getFd());
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -22945,6 +24470,8 @@ public Builder clear() {
 
         fd_ = 0L;
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -22973,6 +24500,7 @@ public org.opendedup.grpc.IOService.FlushRequest buildPartial() {
         org.opendedup.grpc.IOService.FlushRequest result = new org.opendedup.grpc.IOService.FlushRequest(this);
         result.path_ = path_;
         result.fd_ = fd_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -23028,6 +24556,9 @@ public Builder mergeFrom(org.opendedup.grpc.IOService.FlushRequest other) {
         if (other.getFd() != 0L) {
           setFd(other.getFd());
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -23163,6 +24694,37 @@ public Builder clearFd() {
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 3;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -25501,6 +27063,12 @@ public interface StatRequestOrBuilder extends
      */
     com.google.protobuf.ByteString
         getPathBytes();
+
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.StatRequest}
@@ -25554,6 +27122,11 @@ private StatRequest(
               path_ = s;
               break;
             }
+            case 16: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -25624,6 +27197,17 @@ public java.lang.String getPath() {
       }
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 2;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -25641,6 +27225,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (!getPathBytes().isEmpty()) {
         com.google.protobuf.GeneratedMessageV3.writeString(output, 1, path_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(2, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -25653,6 +27240,10 @@ public int getSerializedSize() {
       if (!getPathBytes().isEmpty()) {
         size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, path_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(2, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -25670,6 +27261,8 @@ public boolean equals(final java.lang.Object obj) {
 
       if (!getPath()
           .equals(other.getPath())) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -25683,6 +27276,9 @@ public int hashCode() {
       hash = (19 * hash) + getDescriptor().hashCode();
       hash = (37 * hash) + PATH_FIELD_NUMBER;
       hash = (53 * hash) + getPath().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -25818,6 +27414,8 @@ public Builder clear() {
         super.clear();
         path_ = "";
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -25845,6 +27443,7 @@ public org.opendedup.grpc.IOService.StatRequest build() {
       public org.opendedup.grpc.IOService.StatRequest buildPartial() {
         org.opendedup.grpc.IOService.StatRequest result = new org.opendedup.grpc.IOService.StatRequest(this);
         result.path_ = path_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -25897,6 +27496,9 @@ public Builder mergeFrom(org.opendedup.grpc.IOService.StatRequest other) {
           path_ = other.path_;
           onChanged();
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -26001,6 +27603,37 @@ public Builder setPathBytes(
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 2;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -26947,6 +28580,12 @@ public interface LinkRequestOrBuilder extends
      */
     com.google.protobuf.ByteString
         getPathBytes();
+
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.LinkRequest}
@@ -27000,6 +28639,11 @@ private LinkRequest(
               path_ = s;
               break;
             }
+            case 16: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -27070,6 +28714,17 @@ public java.lang.String getPath() {
       }
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 2;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -27087,6 +28742,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (!getPathBytes().isEmpty()) {
         com.google.protobuf.GeneratedMessageV3.writeString(output, 1, path_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(2, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -27099,6 +28757,10 @@ public int getSerializedSize() {
       if (!getPathBytes().isEmpty()) {
         size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, path_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(2, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -27116,6 +28778,8 @@ public boolean equals(final java.lang.Object obj) {
 
       if (!getPath()
           .equals(other.getPath())) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -27129,6 +28793,9 @@ public int hashCode() {
       hash = (19 * hash) + getDescriptor().hashCode();
       hash = (37 * hash) + PATH_FIELD_NUMBER;
       hash = (53 * hash) + getPath().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -27264,6 +28931,8 @@ public Builder clear() {
         super.clear();
         path_ = "";
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -27291,6 +28960,7 @@ public org.opendedup.grpc.IOService.LinkRequest build() {
       public org.opendedup.grpc.IOService.LinkRequest buildPartial() {
         org.opendedup.grpc.IOService.LinkRequest result = new org.opendedup.grpc.IOService.LinkRequest(this);
         result.path_ = path_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -27343,6 +29013,9 @@ public Builder mergeFrom(org.opendedup.grpc.IOService.LinkRequest other) {
           path_ = other.path_;
           onChanged();
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -27447,6 +29120,37 @@ public Builder setPathBytes(
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 2;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -29742,6 +31446,12 @@ public org.opendedup.grpc.IOService.StatFS getDefaultInstanceForType() {
   public interface StatFSRequestOrBuilder extends
       // @@protoc_insertion_point(interface_extends:org.opendedup.grpc.StatFSRequest)
       com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * int64 pvolumeID = 1;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.StatFSRequest}
@@ -29788,6 +31498,11 @@ private StatFSRequest(
             case 0:
               done = true;
               break;
+            case 8: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -29820,6 +31535,17 @@ private StatFSRequest(
               org.opendedup.grpc.IOService.StatFSRequest.class, org.opendedup.grpc.IOService.StatFSRequest.Builder.class);
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 1;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 1;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -29834,6 +31560,9 @@ public final boolean isInitialized() {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(1, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -29843,6 +31572,10 @@ public int getSerializedSize() {
       if (size != -1) return size;
 
       size = 0;
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(1, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -29858,6 +31591,8 @@ public boolean equals(final java.lang.Object obj) {
       }
       org.opendedup.grpc.IOService.StatFSRequest other = (org.opendedup.grpc.IOService.StatFSRequest) obj;
 
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -29869,6 +31604,9 @@ public int hashCode() {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -30002,6 +31740,8 @@ private void maybeForceBuilderInitialization() {
       @java.lang.Override
       public Builder clear() {
         super.clear();
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -30028,6 +31768,7 @@ public org.opendedup.grpc.IOService.StatFSRequest build() {
       @java.lang.Override
       public org.opendedup.grpc.IOService.StatFSRequest buildPartial() {
         org.opendedup.grpc.IOService.StatFSRequest result = new org.opendedup.grpc.IOService.StatFSRequest(this);
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -30076,6 +31817,9 @@ public Builder mergeFrom(com.google.protobuf.Message other) {
 
       public Builder mergeFrom(org.opendedup.grpc.IOService.StatFSRequest other) {
         if (other == org.opendedup.grpc.IOService.StatFSRequest.getDefaultInstance()) return this;
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -30104,6 +31848,37 @@ public Builder mergeFrom(
         }
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 1;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 1;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 1;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -31062,6 +32837,12 @@ public interface SymLinkRequestOrBuilder extends
      */
     com.google.protobuf.ByteString
         getToBytes();
+
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.SymLinkRequest}
@@ -31122,6 +32903,11 @@ private SymLinkRequest(
               to_ = s;
               break;
             }
+            case 24: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -31230,6 +33016,17 @@ public java.lang.String getTo() {
       }
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 3;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -31250,6 +33047,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (!getToBytes().isEmpty()) {
         com.google.protobuf.GeneratedMessageV3.writeString(output, 2, to_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(3, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -31265,6 +33065,10 @@ public int getSerializedSize() {
       if (!getToBytes().isEmpty()) {
         size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, to_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(3, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -31284,6 +33088,8 @@ public boolean equals(final java.lang.Object obj) {
           .equals(other.getFrom())) return false;
       if (!getTo()
           .equals(other.getTo())) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -31299,6 +33105,9 @@ public int hashCode() {
       hash = (53 * hash) + getFrom().hashCode();
       hash = (37 * hash) + TO_FIELD_NUMBER;
       hash = (53 * hash) + getTo().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -31436,6 +33245,8 @@ public Builder clear() {
 
         to_ = "";
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -31464,6 +33275,7 @@ public org.opendedup.grpc.IOService.SymLinkRequest buildPartial() {
         org.opendedup.grpc.IOService.SymLinkRequest result = new org.opendedup.grpc.IOService.SymLinkRequest(this);
         result.from_ = from_;
         result.to_ = to_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -31520,6 +33332,9 @@ public Builder mergeFrom(org.opendedup.grpc.IOService.SymLinkRequest other) {
           to_ = other.to_;
           onChanged();
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -31700,6 +33515,37 @@ public Builder setToBytes(
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 3;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -32449,6 +34295,12 @@ public interface TruncateRequestOrBuilder extends
      * @return The length.
      */
     long getLength();
+
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.TruncateRequest}
@@ -32507,6 +34359,11 @@ private TruncateRequest(
               length_ = input.readInt64();
               break;
             }
+            case 24: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -32588,6 +34445,17 @@ public long getLength() {
       return length_;
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 3;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -32608,6 +34476,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (length_ != 0L) {
         output.writeInt64(2, length_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(3, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -32624,6 +34495,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeInt64Size(2, length_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(3, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -32643,6 +34518,8 @@ public boolean equals(final java.lang.Object obj) {
           .equals(other.getPath())) return false;
       if (getLength()
           != other.getLength()) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -32659,6 +34536,9 @@ public int hashCode() {
       hash = (37 * hash) + LENGTH_FIELD_NUMBER;
       hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
           getLength());
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -32796,6 +34676,8 @@ public Builder clear() {
 
         length_ = 0L;
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -32824,6 +34706,7 @@ public org.opendedup.grpc.IOService.TruncateRequest buildPartial() {
         org.opendedup.grpc.IOService.TruncateRequest result = new org.opendedup.grpc.IOService.TruncateRequest(this);
         result.path_ = path_;
         result.length_ = length_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -32879,6 +34762,9 @@ public Builder mergeFrom(org.opendedup.grpc.IOService.TruncateRequest other) {
         if (other.getLength() != 0L) {
           setLength(other.getLength());
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -33014,6 +34900,37 @@ public Builder clearLength() {
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 3;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -33769,6 +35686,12 @@ public interface UtimeRequestOrBuilder extends
      * @return The mtime.
      */
     long getMtime();
+
+    /**
+     * int64 pvolumeID = 4;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.UtimeRequest}
@@ -33832,6 +35755,11 @@ private UtimeRequest(
               mtime_ = input.readInt64();
               break;
             }
+            case 32: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -33924,6 +35852,17 @@ public long getMtime() {
       return mtime_;
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 4;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 4;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -33947,6 +35886,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (mtime_ != 0L) {
         output.writeInt64(3, mtime_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(4, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -33967,6 +35909,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeInt64Size(3, mtime_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(4, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -33988,6 +35934,8 @@ public boolean equals(final java.lang.Object obj) {
           != other.getAtime()) return false;
       if (getMtime()
           != other.getMtime()) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -34007,6 +35955,9 @@ public int hashCode() {
       hash = (37 * hash) + MTIME_FIELD_NUMBER;
       hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
           getMtime());
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -34146,6 +36097,8 @@ public Builder clear() {
 
         mtime_ = 0L;
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -34175,6 +36128,7 @@ public org.opendedup.grpc.IOService.UtimeRequest buildPartial() {
         result.path_ = path_;
         result.atime_ = atime_;
         result.mtime_ = mtime_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -34233,6 +36187,9 @@ public Builder mergeFrom(org.opendedup.grpc.IOService.UtimeRequest other) {
         if (other.getMtime() != 0L) {
           setMtime(other.getMtime());
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -34399,6 +36356,37 @@ public Builder clearMtime() {
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 4;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 4;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 4;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -35154,6 +37142,12 @@ public interface GetXAttrRequestOrBuilder extends
      */
     com.google.protobuf.ByteString
         getPathBytes();
+
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.GetXAttrRequest}
@@ -35214,6 +37208,11 @@ private GetXAttrRequest(
               path_ = s;
               break;
             }
+            case 24: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -35322,6 +37321,17 @@ public java.lang.String getPath() {
       }
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 3;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -35342,6 +37352,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (!getPathBytes().isEmpty()) {
         com.google.protobuf.GeneratedMessageV3.writeString(output, 2, path_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(3, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -35357,6 +37370,10 @@ public int getSerializedSize() {
       if (!getPathBytes().isEmpty()) {
         size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, path_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(3, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -35376,6 +37393,8 @@ public boolean equals(final java.lang.Object obj) {
           .equals(other.getAttr())) return false;
       if (!getPath()
           .equals(other.getPath())) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -35391,6 +37410,9 @@ public int hashCode() {
       hash = (53 * hash) + getAttr().hashCode();
       hash = (37 * hash) + PATH_FIELD_NUMBER;
       hash = (53 * hash) + getPath().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -35528,6 +37550,8 @@ public Builder clear() {
 
         path_ = "";
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -35556,6 +37580,7 @@ public org.opendedup.grpc.IOService.GetXAttrRequest buildPartial() {
         org.opendedup.grpc.IOService.GetXAttrRequest result = new org.opendedup.grpc.IOService.GetXAttrRequest(this);
         result.attr_ = attr_;
         result.path_ = path_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -35612,6 +37637,9 @@ public Builder mergeFrom(org.opendedup.grpc.IOService.GetXAttrRequest other) {
           path_ = other.path_;
           onChanged();
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -35792,6 +37820,37 @@ public Builder setPathBytes(
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 3;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -36709,6 +38768,12 @@ public interface SetXAttrRequestOrBuilder extends
      */
     com.google.protobuf.ByteString
         getPathBytes();
+
+    /**
+     * int64 pvolumeID = 4;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.SetXAttrRequest}
@@ -36776,6 +38841,11 @@ private SetXAttrRequest(
               path_ = s;
               break;
             }
+            case 32: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -36922,6 +38992,17 @@ public java.lang.String getPath() {
       }
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 4;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 4;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -36945,6 +39026,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (!getPathBytes().isEmpty()) {
         com.google.protobuf.GeneratedMessageV3.writeString(output, 3, path_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(4, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -36963,6 +39047,10 @@ public int getSerializedSize() {
       if (!getPathBytes().isEmpty()) {
         size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, path_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(4, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -36984,6 +39072,8 @@ public boolean equals(final java.lang.Object obj) {
           .equals(other.getValue())) return false;
       if (!getPath()
           .equals(other.getPath())) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -37001,6 +39091,9 @@ public int hashCode() {
       hash = (53 * hash) + getValue().hashCode();
       hash = (37 * hash) + PATH_FIELD_NUMBER;
       hash = (53 * hash) + getPath().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -37140,6 +39233,8 @@ public Builder clear() {
 
         path_ = "";
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -37169,6 +39264,7 @@ public org.opendedup.grpc.IOService.SetXAttrRequest buildPartial() {
         result.attr_ = attr_;
         result.value_ = value_;
         result.path_ = path_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -37229,6 +39325,9 @@ public Builder mergeFrom(org.opendedup.grpc.IOService.SetXAttrRequest other) {
           path_ = other.path_;
           onChanged();
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -37485,6 +39584,37 @@ public Builder setPathBytes(
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 4;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 4;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 4;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -38455,6 +40585,12 @@ public interface RemoveXAttrRequestOrBuilder extends
      */
     com.google.protobuf.ByteString
         getPathBytes();
+
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.RemoveXAttrRequest}
@@ -38515,6 +40651,11 @@ private RemoveXAttrRequest(
               path_ = s;
               break;
             }
+            case 24: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -38623,6 +40764,17 @@ public java.lang.String getPath() {
       }
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 3;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -38643,6 +40795,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (!getPathBytes().isEmpty()) {
         com.google.protobuf.GeneratedMessageV3.writeString(output, 2, path_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(3, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -38658,6 +40813,10 @@ public int getSerializedSize() {
       if (!getPathBytes().isEmpty()) {
         size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, path_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(3, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -38677,6 +40836,8 @@ public boolean equals(final java.lang.Object obj) {
           .equals(other.getAttr())) return false;
       if (!getPath()
           .equals(other.getPath())) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -38692,6 +40853,9 @@ public int hashCode() {
       hash = (53 * hash) + getAttr().hashCode();
       hash = (37 * hash) + PATH_FIELD_NUMBER;
       hash = (53 * hash) + getPath().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -38829,6 +40993,8 @@ public Builder clear() {
 
         path_ = "";
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -38857,6 +41023,7 @@ public org.opendedup.grpc.IOService.RemoveXAttrRequest buildPartial() {
         org.opendedup.grpc.IOService.RemoveXAttrRequest result = new org.opendedup.grpc.IOService.RemoveXAttrRequest(this);
         result.attr_ = attr_;
         result.path_ = path_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -38913,6 +41080,9 @@ public Builder mergeFrom(org.opendedup.grpc.IOService.RemoveXAttrRequest other)
           path_ = other.path_;
           onChanged();
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -39093,6 +41263,37 @@ public Builder setPathBytes(
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 3;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -39848,6 +42049,12 @@ public interface GetXAttrSizeRequestOrBuilder extends
      */
     com.google.protobuf.ByteString
         getPathBytes();
+
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.GetXAttrSizeRequest}
@@ -39908,6 +42115,11 @@ private GetXAttrSizeRequest(
               path_ = s;
               break;
             }
+            case 24: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -40016,6 +42228,17 @@ public java.lang.String getPath() {
       }
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 3;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -40036,6 +42259,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (!getPathBytes().isEmpty()) {
         com.google.protobuf.GeneratedMessageV3.writeString(output, 2, path_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(3, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -40051,6 +42277,10 @@ public int getSerializedSize() {
       if (!getPathBytes().isEmpty()) {
         size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, path_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(3, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -40070,6 +42300,8 @@ public boolean equals(final java.lang.Object obj) {
           .equals(other.getAttr())) return false;
       if (!getPath()
           .equals(other.getPath())) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -40085,6 +42317,9 @@ public int hashCode() {
       hash = (53 * hash) + getAttr().hashCode();
       hash = (37 * hash) + PATH_FIELD_NUMBER;
       hash = (53 * hash) + getPath().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -40222,6 +42457,8 @@ public Builder clear() {
 
         path_ = "";
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -40250,6 +42487,7 @@ public org.opendedup.grpc.IOService.GetXAttrSizeRequest buildPartial() {
         org.opendedup.grpc.IOService.GetXAttrSizeRequest result = new org.opendedup.grpc.IOService.GetXAttrSizeRequest(this);
         result.attr_ = attr_;
         result.path_ = path_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -40306,6 +42544,9 @@ public Builder mergeFrom(org.opendedup.grpc.IOService.GetXAttrSizeRequest other)
           path_ = other.path_;
           onChanged();
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -40486,6 +42727,37 @@ public Builder setPathBytes(
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 3;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -41311,6 +43583,12 @@ public interface FsyncRequestOrBuilder extends
      * @return The datasync.
      */
     boolean getDatasync();
+
+    /**
+     * int64 pvolumeID = 4;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.FsyncRequest}
@@ -41374,6 +43652,11 @@ private FsyncRequest(
               datasync_ = input.readBool();
               break;
             }
+            case 32: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -41466,6 +43749,17 @@ public boolean getDatasync() {
       return datasync_;
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 4;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 4;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -41489,6 +43783,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (datasync_ != false) {
         output.writeBool(3, datasync_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(4, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -41509,6 +43806,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeBoolSize(3, datasync_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(4, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -41530,6 +43831,8 @@ public boolean equals(final java.lang.Object obj) {
           != other.getFh()) return false;
       if (getDatasync()
           != other.getDatasync()) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -41549,6 +43852,9 @@ public int hashCode() {
       hash = (37 * hash) + DATASYNC_FIELD_NUMBER;
       hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
           getDatasync());
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -41688,6 +43994,8 @@ public Builder clear() {
 
         datasync_ = false;
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -41717,6 +44025,7 @@ public org.opendedup.grpc.IOService.FsyncRequest buildPartial() {
         result.path_ = path_;
         result.fh_ = fh_;
         result.datasync_ = datasync_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -41775,6 +44084,9 @@ public Builder mergeFrom(org.opendedup.grpc.IOService.FsyncRequest other) {
         if (other.getDatasync() != false) {
           setDatasync(other.getDatasync());
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -41941,6 +44253,37 @@ public Builder clearDatasync() {
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 4;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 4;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 4;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -42684,6 +45027,12 @@ public interface SyncNotificationSubscriptionOrBuilder extends
      */
     com.google.protobuf.ByteString
         getUidBytes();
+
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.SyncNotificationSubscription}
@@ -42737,6 +45086,2479 @@ private SyncNotificationSubscription(
               uid_ = s;
               break;
             }
+            case 16: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return org.opendedup.grpc.IOService.internal_static_org_opendedup_grpc_SyncNotificationSubscription_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return org.opendedup.grpc.IOService.internal_static_org_opendedup_grpc_SyncNotificationSubscription_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              org.opendedup.grpc.IOService.SyncNotificationSubscription.class, org.opendedup.grpc.IOService.SyncNotificationSubscription.Builder.class);
+    }
+
+    public static final int UID_FIELD_NUMBER = 1;
+    private volatile java.lang.Object uid_;
+    /**
+     * string uid = 1;
+     * @return The uid.
+     */
+    @java.lang.Override
+    public java.lang.String getUid() {
+      java.lang.Object ref = uid_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        uid_ = s;
+        return s;
+      }
+    }
+    /**
+     * string uid = 1;
+     * @return The bytes for uid.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getUidBytes() {
+      java.lang.Object ref = uid_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        uid_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int PVOLUMEID_FIELD_NUMBER = 2;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (!getUidBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, uid_);
+      }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(2, pvolumeID_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (!getUidBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, uid_);
+      }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(2, pvolumeID_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof org.opendedup.grpc.IOService.SyncNotificationSubscription)) {
+        return super.equals(obj);
+      }
+      org.opendedup.grpc.IOService.SyncNotificationSubscription other = (org.opendedup.grpc.IOService.SyncNotificationSubscription) obj;
+
+      if (!getUid()
+          .equals(other.getUid())) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + UID_FIELD_NUMBER;
+      hash = (53 * hash) + getUid().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static org.opendedup.grpc.IOService.SyncNotificationSubscription parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.opendedup.grpc.IOService.SyncNotificationSubscription parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.opendedup.grpc.IOService.SyncNotificationSubscription parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.opendedup.grpc.IOService.SyncNotificationSubscription parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.opendedup.grpc.IOService.SyncNotificationSubscription parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.opendedup.grpc.IOService.SyncNotificationSubscription parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.opendedup.grpc.IOService.SyncNotificationSubscription parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static org.opendedup.grpc.IOService.SyncNotificationSubscription parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static org.opendedup.grpc.IOService.SyncNotificationSubscription parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static org.opendedup.grpc.IOService.SyncNotificationSubscription parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static org.opendedup.grpc.IOService.SyncNotificationSubscription parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static org.opendedup.grpc.IOService.SyncNotificationSubscription parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(org.opendedup.grpc.IOService.SyncNotificationSubscription prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code org.opendedup.grpc.SyncNotificationSubscription}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder implements
+        // @@protoc_insertion_point(builder_implements:org.opendedup.grpc.SyncNotificationSubscription)
+        org.opendedup.grpc.IOService.SyncNotificationSubscriptionOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return org.opendedup.grpc.IOService.internal_static_org_opendedup_grpc_SyncNotificationSubscription_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return org.opendedup.grpc.IOService.internal_static_org_opendedup_grpc_SyncNotificationSubscription_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                org.opendedup.grpc.IOService.SyncNotificationSubscription.class, org.opendedup.grpc.IOService.SyncNotificationSubscription.Builder.class);
+      }
+
+      // Construct using org.opendedup.grpc.IOService.SyncNotificationSubscription.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        uid_ = "";
+
+        pvolumeID_ = 0L;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return org.opendedup.grpc.IOService.internal_static_org_opendedup_grpc_SyncNotificationSubscription_descriptor;
+      }
+
+      @java.lang.Override
+      public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInstanceForType() {
+        return org.opendedup.grpc.IOService.SyncNotificationSubscription.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public org.opendedup.grpc.IOService.SyncNotificationSubscription build() {
+        org.opendedup.grpc.IOService.SyncNotificationSubscription result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public org.opendedup.grpc.IOService.SyncNotificationSubscription buildPartial() {
+        org.opendedup.grpc.IOService.SyncNotificationSubscription result = new org.opendedup.grpc.IOService.SyncNotificationSubscription(this);
+        result.uid_ = uid_;
+        result.pvolumeID_ = pvolumeID_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof org.opendedup.grpc.IOService.SyncNotificationSubscription) {
+          return mergeFrom((org.opendedup.grpc.IOService.SyncNotificationSubscription)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(org.opendedup.grpc.IOService.SyncNotificationSubscription other) {
+        if (other == org.opendedup.grpc.IOService.SyncNotificationSubscription.getDefaultInstance()) return this;
+        if (!other.getUid().isEmpty()) {
+          uid_ = other.uid_;
+          onChanged();
+        }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        org.opendedup.grpc.IOService.SyncNotificationSubscription parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (org.opendedup.grpc.IOService.SyncNotificationSubscription) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private java.lang.Object uid_ = "";
+      /**
+       * string uid = 1;
+       * @return The uid.
+       */
+      public java.lang.String getUid() {
+        java.lang.Object ref = uid_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          uid_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * string uid = 1;
+       * @return The bytes for uid.
+       */
+      public com.google.protobuf.ByteString
+          getUidBytes() {
+        java.lang.Object ref = uid_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          uid_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * string uid = 1;
+       * @param value The uid to set.
+       * @return This builder for chaining.
+       */
+      public Builder setUid(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        uid_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * string uid = 1;
+       * @return This builder for chaining.
+       */
+      public Builder clearUid() {
+        
+        uid_ = getDefaultInstance().getUid();
+        onChanged();
+        return this;
+      }
+      /**
+       * string uid = 1;
+       * @param value The bytes for uid to set.
+       * @return This builder for chaining.
+       */
+      public Builder setUidBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        uid_ = value;
+        onChanged();
+        return this;
+      }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 2;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:org.opendedup.grpc.SyncNotificationSubscription)
+    }
+
+    // @@protoc_insertion_point(class_scope:org.opendedup.grpc.SyncNotificationSubscription)
+    private static final org.opendedup.grpc.IOService.SyncNotificationSubscription DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new org.opendedup.grpc.IOService.SyncNotificationSubscription();
+    }
+
+    public static org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser
+        PARSER = new com.google.protobuf.AbstractParser() {
+      @java.lang.Override
+      public SyncNotificationSubscription parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new SyncNotificationSubscription(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface SetRetrievalTierRequestOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:org.opendedup.grpc.SetRetrievalTierRequest)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * string tierType = 1;
+     * @return The tierType.
+     */
+    java.lang.String getTierType();
+    /**
+     * string tierType = 1;
+     * @return The bytes for tierType.
+     */
+    com.google.protobuf.ByteString
+        getTierTypeBytes();
+
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
+  }
+  /**
+   * Protobuf type {@code org.opendedup.grpc.SetRetrievalTierRequest}
+   */
+  public static final class SetRetrievalTierRequest extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:org.opendedup.grpc.SetRetrievalTierRequest)
+      SetRetrievalTierRequestOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use SetRetrievalTierRequest.newBuilder() to construct.
+    private SetRetrievalTierRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) {
+      super(builder);
+    }
+    private SetRetrievalTierRequest() {
+      tierType_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new SetRetrievalTierRequest();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private SetRetrievalTierRequest(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              tierType_ = s;
+              break;
+            }
+            case 16: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return org.opendedup.grpc.IOService.internal_static_org_opendedup_grpc_SetRetrievalTierRequest_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return org.opendedup.grpc.IOService.internal_static_org_opendedup_grpc_SetRetrievalTierRequest_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              org.opendedup.grpc.IOService.SetRetrievalTierRequest.class, org.opendedup.grpc.IOService.SetRetrievalTierRequest.Builder.class);
+    }
+
+    public static final int TIERTYPE_FIELD_NUMBER = 1;
+    private volatile java.lang.Object tierType_;
+    /**
+     * string tierType = 1;
+     * @return The tierType.
+     */
+    @java.lang.Override
+    public java.lang.String getTierType() {
+      java.lang.Object ref = tierType_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        tierType_ = s;
+        return s;
+      }
+    }
+    /**
+     * string tierType = 1;
+     * @return The bytes for tierType.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getTierTypeBytes() {
+      java.lang.Object ref = tierType_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        tierType_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int PVOLUMEID_FIELD_NUMBER = 2;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (!getTierTypeBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, tierType_);
+      }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(2, pvolumeID_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (!getTierTypeBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, tierType_);
+      }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(2, pvolumeID_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof org.opendedup.grpc.IOService.SetRetrievalTierRequest)) {
+        return super.equals(obj);
+      }
+      org.opendedup.grpc.IOService.SetRetrievalTierRequest other = (org.opendedup.grpc.IOService.SetRetrievalTierRequest) obj;
+
+      if (!getTierType()
+          .equals(other.getTierType())) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + TIERTYPE_FIELD_NUMBER;
+      hash = (53 * hash) + getTierType().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static org.opendedup.grpc.IOService.SetRetrievalTierRequest parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.opendedup.grpc.IOService.SetRetrievalTierRequest parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.opendedup.grpc.IOService.SetRetrievalTierRequest parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.opendedup.grpc.IOService.SetRetrievalTierRequest parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.opendedup.grpc.IOService.SetRetrievalTierRequest parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.opendedup.grpc.IOService.SetRetrievalTierRequest parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.opendedup.grpc.IOService.SetRetrievalTierRequest parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static org.opendedup.grpc.IOService.SetRetrievalTierRequest parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static org.opendedup.grpc.IOService.SetRetrievalTierRequest parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static org.opendedup.grpc.IOService.SetRetrievalTierRequest parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static org.opendedup.grpc.IOService.SetRetrievalTierRequest parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static org.opendedup.grpc.IOService.SetRetrievalTierRequest parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(org.opendedup.grpc.IOService.SetRetrievalTierRequest prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code org.opendedup.grpc.SetRetrievalTierRequest}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder implements
+        // @@protoc_insertion_point(builder_implements:org.opendedup.grpc.SetRetrievalTierRequest)
+        org.opendedup.grpc.IOService.SetRetrievalTierRequestOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return org.opendedup.grpc.IOService.internal_static_org_opendedup_grpc_SetRetrievalTierRequest_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return org.opendedup.grpc.IOService.internal_static_org_opendedup_grpc_SetRetrievalTierRequest_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                org.opendedup.grpc.IOService.SetRetrievalTierRequest.class, org.opendedup.grpc.IOService.SetRetrievalTierRequest.Builder.class);
+      }
+
+      // Construct using org.opendedup.grpc.IOService.SetRetrievalTierRequest.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        tierType_ = "";
+
+        pvolumeID_ = 0L;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return org.opendedup.grpc.IOService.internal_static_org_opendedup_grpc_SetRetrievalTierRequest_descriptor;
+      }
+
+      @java.lang.Override
+      public org.opendedup.grpc.IOService.SetRetrievalTierRequest getDefaultInstanceForType() {
+        return org.opendedup.grpc.IOService.SetRetrievalTierRequest.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public org.opendedup.grpc.IOService.SetRetrievalTierRequest build() {
+        org.opendedup.grpc.IOService.SetRetrievalTierRequest result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public org.opendedup.grpc.IOService.SetRetrievalTierRequest buildPartial() {
+        org.opendedup.grpc.IOService.SetRetrievalTierRequest result = new org.opendedup.grpc.IOService.SetRetrievalTierRequest(this);
+        result.tierType_ = tierType_;
+        result.pvolumeID_ = pvolumeID_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof org.opendedup.grpc.IOService.SetRetrievalTierRequest) {
+          return mergeFrom((org.opendedup.grpc.IOService.SetRetrievalTierRequest)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(org.opendedup.grpc.IOService.SetRetrievalTierRequest other) {
+        if (other == org.opendedup.grpc.IOService.SetRetrievalTierRequest.getDefaultInstance()) return this;
+        if (!other.getTierType().isEmpty()) {
+          tierType_ = other.tierType_;
+          onChanged();
+        }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        org.opendedup.grpc.IOService.SetRetrievalTierRequest parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (org.opendedup.grpc.IOService.SetRetrievalTierRequest) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private java.lang.Object tierType_ = "";
+      /**
+       * string tierType = 1;
+       * @return The tierType.
+       */
+      public java.lang.String getTierType() {
+        java.lang.Object ref = tierType_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          tierType_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * string tierType = 1;
+       * @return The bytes for tierType.
+       */
+      public com.google.protobuf.ByteString
+          getTierTypeBytes() {
+        java.lang.Object ref = tierType_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          tierType_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * string tierType = 1;
+       * @param value The tierType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setTierType(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        tierType_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * string tierType = 1;
+       * @return This builder for chaining.
+       */
+      public Builder clearTierType() {
+        
+        tierType_ = getDefaultInstance().getTierType();
+        onChanged();
+        return this;
+      }
+      /**
+       * string tierType = 1;
+       * @param value The bytes for tierType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setTierTypeBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        tierType_ = value;
+        onChanged();
+        return this;
+      }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 2;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:org.opendedup.grpc.SetRetrievalTierRequest)
+    }
+
+    // @@protoc_insertion_point(class_scope:org.opendedup.grpc.SetRetrievalTierRequest)
+    private static final org.opendedup.grpc.IOService.SetRetrievalTierRequest DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new org.opendedup.grpc.IOService.SetRetrievalTierRequest();
+    }
+
+    public static org.opendedup.grpc.IOService.SetRetrievalTierRequest getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser
+        PARSER = new com.google.protobuf.AbstractParser() {
+      @java.lang.Override
+      public SetRetrievalTierRequest parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new SetRetrievalTierRequest(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public org.opendedup.grpc.IOService.SetRetrievalTierRequest getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface SetRetrievalTierResponseOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:org.opendedup.grpc.SetRetrievalTierResponse)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * string error = 1;
+     * @return The error.
+     */
+    java.lang.String getError();
+    /**
+     * string error = 1;
+     * @return The bytes for error.
+     */
+    com.google.protobuf.ByteString
+        getErrorBytes();
+
+    /**
+     * .org.opendedup.grpc.errorCodes errorCode = 2;
+     * @return The enum numeric value on the wire for errorCode.
+     */
+    int getErrorCodeValue();
+    /**
+     * .org.opendedup.grpc.errorCodes errorCode = 2;
+     * @return The errorCode.
+     */
+    org.opendedup.grpc.FileInfo.errorCodes getErrorCode();
+  }
+  /**
+   * Protobuf type {@code org.opendedup.grpc.SetRetrievalTierResponse}
+   */
+  public static final class SetRetrievalTierResponse extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:org.opendedup.grpc.SetRetrievalTierResponse)
+      SetRetrievalTierResponseOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use SetRetrievalTierResponse.newBuilder() to construct.
+    private SetRetrievalTierResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) {
+      super(builder);
+    }
+    private SetRetrievalTierResponse() {
+      error_ = "";
+      errorCode_ = 0;
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new SetRetrievalTierResponse();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private SetRetrievalTierResponse(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              error_ = s;
+              break;
+            }
+            case 16: {
+              int rawValue = input.readEnum();
+
+              errorCode_ = rawValue;
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return org.opendedup.grpc.IOService.internal_static_org_opendedup_grpc_SetRetrievalTierResponse_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return org.opendedup.grpc.IOService.internal_static_org_opendedup_grpc_SetRetrievalTierResponse_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              org.opendedup.grpc.IOService.SetRetrievalTierResponse.class, org.opendedup.grpc.IOService.SetRetrievalTierResponse.Builder.class);
+    }
+
+    public static final int ERROR_FIELD_NUMBER = 1;
+    private volatile java.lang.Object error_;
+    /**
+     * string error = 1;
+     * @return The error.
+     */
+    @java.lang.Override
+    public java.lang.String getError() {
+      java.lang.Object ref = error_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        error_ = s;
+        return s;
+      }
+    }
+    /**
+     * string error = 1;
+     * @return The bytes for error.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getErrorBytes() {
+      java.lang.Object ref = error_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        error_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int ERRORCODE_FIELD_NUMBER = 2;
+    private int errorCode_;
+    /**
+     * .org.opendedup.grpc.errorCodes errorCode = 2;
+     * @return The enum numeric value on the wire for errorCode.
+     */
+    @java.lang.Override public int getErrorCodeValue() {
+      return errorCode_;
+    }
+    /**
+     * .org.opendedup.grpc.errorCodes errorCode = 2;
+     * @return The errorCode.
+     */
+    @java.lang.Override public org.opendedup.grpc.FileInfo.errorCodes getErrorCode() {
+      @SuppressWarnings("deprecation")
+      org.opendedup.grpc.FileInfo.errorCodes result = org.opendedup.grpc.FileInfo.errorCodes.valueOf(errorCode_);
+      return result == null ? org.opendedup.grpc.FileInfo.errorCodes.UNRECOGNIZED : result;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (!getErrorBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, error_);
+      }
+      if (errorCode_ != org.opendedup.grpc.FileInfo.errorCodes.NOERR.getNumber()) {
+        output.writeEnum(2, errorCode_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (!getErrorBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, error_);
+      }
+      if (errorCode_ != org.opendedup.grpc.FileInfo.errorCodes.NOERR.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(2, errorCode_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof org.opendedup.grpc.IOService.SetRetrievalTierResponse)) {
+        return super.equals(obj);
+      }
+      org.opendedup.grpc.IOService.SetRetrievalTierResponse other = (org.opendedup.grpc.IOService.SetRetrievalTierResponse) obj;
+
+      if (!getError()
+          .equals(other.getError())) return false;
+      if (errorCode_ != other.errorCode_) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + ERROR_FIELD_NUMBER;
+      hash = (53 * hash) + getError().hashCode();
+      hash = (37 * hash) + ERRORCODE_FIELD_NUMBER;
+      hash = (53 * hash) + errorCode_;
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static org.opendedup.grpc.IOService.SetRetrievalTierResponse parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.opendedup.grpc.IOService.SetRetrievalTierResponse parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.opendedup.grpc.IOService.SetRetrievalTierResponse parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.opendedup.grpc.IOService.SetRetrievalTierResponse parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.opendedup.grpc.IOService.SetRetrievalTierResponse parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.opendedup.grpc.IOService.SetRetrievalTierResponse parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.opendedup.grpc.IOService.SetRetrievalTierResponse parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static org.opendedup.grpc.IOService.SetRetrievalTierResponse parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static org.opendedup.grpc.IOService.SetRetrievalTierResponse parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static org.opendedup.grpc.IOService.SetRetrievalTierResponse parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static org.opendedup.grpc.IOService.SetRetrievalTierResponse parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static org.opendedup.grpc.IOService.SetRetrievalTierResponse parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(org.opendedup.grpc.IOService.SetRetrievalTierResponse prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code org.opendedup.grpc.SetRetrievalTierResponse}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder implements
+        // @@protoc_insertion_point(builder_implements:org.opendedup.grpc.SetRetrievalTierResponse)
+        org.opendedup.grpc.IOService.SetRetrievalTierResponseOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return org.opendedup.grpc.IOService.internal_static_org_opendedup_grpc_SetRetrievalTierResponse_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return org.opendedup.grpc.IOService.internal_static_org_opendedup_grpc_SetRetrievalTierResponse_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                org.opendedup.grpc.IOService.SetRetrievalTierResponse.class, org.opendedup.grpc.IOService.SetRetrievalTierResponse.Builder.class);
+      }
+
+      // Construct using org.opendedup.grpc.IOService.SetRetrievalTierResponse.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        error_ = "";
+
+        errorCode_ = 0;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return org.opendedup.grpc.IOService.internal_static_org_opendedup_grpc_SetRetrievalTierResponse_descriptor;
+      }
+
+      @java.lang.Override
+      public org.opendedup.grpc.IOService.SetRetrievalTierResponse getDefaultInstanceForType() {
+        return org.opendedup.grpc.IOService.SetRetrievalTierResponse.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public org.opendedup.grpc.IOService.SetRetrievalTierResponse build() {
+        org.opendedup.grpc.IOService.SetRetrievalTierResponse result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public org.opendedup.grpc.IOService.SetRetrievalTierResponse buildPartial() {
+        org.opendedup.grpc.IOService.SetRetrievalTierResponse result = new org.opendedup.grpc.IOService.SetRetrievalTierResponse(this);
+        result.error_ = error_;
+        result.errorCode_ = errorCode_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof org.opendedup.grpc.IOService.SetRetrievalTierResponse) {
+          return mergeFrom((org.opendedup.grpc.IOService.SetRetrievalTierResponse)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(org.opendedup.grpc.IOService.SetRetrievalTierResponse other) {
+        if (other == org.opendedup.grpc.IOService.SetRetrievalTierResponse.getDefaultInstance()) return this;
+        if (!other.getError().isEmpty()) {
+          error_ = other.error_;
+          onChanged();
+        }
+        if (other.errorCode_ != 0) {
+          setErrorCodeValue(other.getErrorCodeValue());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        org.opendedup.grpc.IOService.SetRetrievalTierResponse parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (org.opendedup.grpc.IOService.SetRetrievalTierResponse) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private java.lang.Object error_ = "";
+      /**
+       * string error = 1;
+       * @return The error.
+       */
+      public java.lang.String getError() {
+        java.lang.Object ref = error_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          error_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * string error = 1;
+       * @return The bytes for error.
+       */
+      public com.google.protobuf.ByteString
+          getErrorBytes() {
+        java.lang.Object ref = error_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          error_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * string error = 1;
+       * @param value The error to set.
+       * @return This builder for chaining.
+       */
+      public Builder setError(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        error_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * string error = 1;
+       * @return This builder for chaining.
+       */
+      public Builder clearError() {
+        
+        error_ = getDefaultInstance().getError();
+        onChanged();
+        return this;
+      }
+      /**
+       * string error = 1;
+       * @param value The bytes for error to set.
+       * @return This builder for chaining.
+       */
+      public Builder setErrorBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        error_ = value;
+        onChanged();
+        return this;
+      }
+
+      private int errorCode_ = 0;
+      /**
+       * .org.opendedup.grpc.errorCodes errorCode = 2;
+       * @return The enum numeric value on the wire for errorCode.
+       */
+      @java.lang.Override public int getErrorCodeValue() {
+        return errorCode_;
+      }
+      /**
+       * .org.opendedup.grpc.errorCodes errorCode = 2;
+       * @param value The enum numeric value on the wire for errorCode to set.
+       * @return This builder for chaining.
+       */
+      public Builder setErrorCodeValue(int value) {
+        
+        errorCode_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * .org.opendedup.grpc.errorCodes errorCode = 2;
+       * @return The errorCode.
+       */
+      @java.lang.Override
+      public org.opendedup.grpc.FileInfo.errorCodes getErrorCode() {
+        @SuppressWarnings("deprecation")
+        org.opendedup.grpc.FileInfo.errorCodes result = org.opendedup.grpc.FileInfo.errorCodes.valueOf(errorCode_);
+        return result == null ? org.opendedup.grpc.FileInfo.errorCodes.UNRECOGNIZED : result;
+      }
+      /**
+       * .org.opendedup.grpc.errorCodes errorCode = 2;
+       * @param value The errorCode to set.
+       * @return This builder for chaining.
+       */
+      public Builder setErrorCode(org.opendedup.grpc.FileInfo.errorCodes value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        errorCode_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * .org.opendedup.grpc.errorCodes errorCode = 2;
+       * @return This builder for chaining.
+       */
+      public Builder clearErrorCode() {
+        
+        errorCode_ = 0;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:org.opendedup.grpc.SetRetrievalTierResponse)
+    }
+
+    // @@protoc_insertion_point(class_scope:org.opendedup.grpc.SetRetrievalTierResponse)
+    private static final org.opendedup.grpc.IOService.SetRetrievalTierResponse DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new org.opendedup.grpc.IOService.SetRetrievalTierResponse();
+    }
+
+    public static org.opendedup.grpc.IOService.SetRetrievalTierResponse getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser
+        PARSER = new com.google.protobuf.AbstractParser() {
+      @java.lang.Override
+      public SetRetrievalTierResponse parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new SetRetrievalTierResponse(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public org.opendedup.grpc.IOService.SetRetrievalTierResponse getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface GetRetrievalTierRequestOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:org.opendedup.grpc.GetRetrievalTierRequest)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * int64 pvolumeID = 1;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
+  }
+  /**
+   * Protobuf type {@code org.opendedup.grpc.GetRetrievalTierRequest}
+   */
+  public static final class GetRetrievalTierRequest extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:org.opendedup.grpc.GetRetrievalTierRequest)
+      GetRetrievalTierRequestOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use GetRetrievalTierRequest.newBuilder() to construct.
+    private GetRetrievalTierRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) {
+      super(builder);
+    }
+    private GetRetrievalTierRequest() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new GetRetrievalTierRequest();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private GetRetrievalTierRequest(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 8: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return org.opendedup.grpc.IOService.internal_static_org_opendedup_grpc_GetRetrievalTierRequest_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return org.opendedup.grpc.IOService.internal_static_org_opendedup_grpc_GetRetrievalTierRequest_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              org.opendedup.grpc.IOService.GetRetrievalTierRequest.class, org.opendedup.grpc.IOService.GetRetrievalTierRequest.Builder.class);
+    }
+
+    public static final int PVOLUMEID_FIELD_NUMBER = 1;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 1;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(1, pvolumeID_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(1, pvolumeID_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof org.opendedup.grpc.IOService.GetRetrievalTierRequest)) {
+        return super.equals(obj);
+      }
+      org.opendedup.grpc.IOService.GetRetrievalTierRequest other = (org.opendedup.grpc.IOService.GetRetrievalTierRequest) obj;
+
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static org.opendedup.grpc.IOService.GetRetrievalTierRequest parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.opendedup.grpc.IOService.GetRetrievalTierRequest parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.opendedup.grpc.IOService.GetRetrievalTierRequest parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.opendedup.grpc.IOService.GetRetrievalTierRequest parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.opendedup.grpc.IOService.GetRetrievalTierRequest parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static org.opendedup.grpc.IOService.GetRetrievalTierRequest parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static org.opendedup.grpc.IOService.GetRetrievalTierRequest parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static org.opendedup.grpc.IOService.GetRetrievalTierRequest parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static org.opendedup.grpc.IOService.GetRetrievalTierRequest parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static org.opendedup.grpc.IOService.GetRetrievalTierRequest parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static org.opendedup.grpc.IOService.GetRetrievalTierRequest parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static org.opendedup.grpc.IOService.GetRetrievalTierRequest parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(org.opendedup.grpc.IOService.GetRetrievalTierRequest prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code org.opendedup.grpc.GetRetrievalTierRequest}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder implements
+        // @@protoc_insertion_point(builder_implements:org.opendedup.grpc.GetRetrievalTierRequest)
+        org.opendedup.grpc.IOService.GetRetrievalTierRequestOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return org.opendedup.grpc.IOService.internal_static_org_opendedup_grpc_GetRetrievalTierRequest_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return org.opendedup.grpc.IOService.internal_static_org_opendedup_grpc_GetRetrievalTierRequest_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                org.opendedup.grpc.IOService.GetRetrievalTierRequest.class, org.opendedup.grpc.IOService.GetRetrievalTierRequest.Builder.class);
+      }
+
+      // Construct using org.opendedup.grpc.IOService.GetRetrievalTierRequest.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        pvolumeID_ = 0L;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return org.opendedup.grpc.IOService.internal_static_org_opendedup_grpc_GetRetrievalTierRequest_descriptor;
+      }
+
+      @java.lang.Override
+      public org.opendedup.grpc.IOService.GetRetrievalTierRequest getDefaultInstanceForType() {
+        return org.opendedup.grpc.IOService.GetRetrievalTierRequest.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public org.opendedup.grpc.IOService.GetRetrievalTierRequest build() {
+        org.opendedup.grpc.IOService.GetRetrievalTierRequest result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public org.opendedup.grpc.IOService.GetRetrievalTierRequest buildPartial() {
+        org.opendedup.grpc.IOService.GetRetrievalTierRequest result = new org.opendedup.grpc.IOService.GetRetrievalTierRequest(this);
+        result.pvolumeID_ = pvolumeID_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof org.opendedup.grpc.IOService.GetRetrievalTierRequest) {
+          return mergeFrom((org.opendedup.grpc.IOService.GetRetrievalTierRequest)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(org.opendedup.grpc.IOService.GetRetrievalTierRequest other) {
+        if (other == org.opendedup.grpc.IOService.GetRetrievalTierRequest.getDefaultInstance()) return this;
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        org.opendedup.grpc.IOService.GetRetrievalTierRequest parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (org.opendedup.grpc.IOService.GetRetrievalTierRequest) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 1;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 1;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 1;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:org.opendedup.grpc.GetRetrievalTierRequest)
+    }
+
+    // @@protoc_insertion_point(class_scope:org.opendedup.grpc.GetRetrievalTierRequest)
+    private static final org.opendedup.grpc.IOService.GetRetrievalTierRequest DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new org.opendedup.grpc.IOService.GetRetrievalTierRequest();
+    }
+
+    public static org.opendedup.grpc.IOService.GetRetrievalTierRequest getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser
+        PARSER = new com.google.protobuf.AbstractParser() {
+      @java.lang.Override
+      public GetRetrievalTierRequest parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new GetRetrievalTierRequest(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public org.opendedup.grpc.IOService.GetRetrievalTierRequest getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface GetRetrievalTierResponseOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:org.opendedup.grpc.GetRetrievalTierResponse)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * string tierType = 1;
+     * @return The tierType.
+     */
+    java.lang.String getTierType();
+    /**
+     * string tierType = 1;
+     * @return The bytes for tierType.
+     */
+    com.google.protobuf.ByteString
+        getTierTypeBytes();
+
+    /**
+     * string error = 2;
+     * @return The error.
+     */
+    java.lang.String getError();
+    /**
+     * string error = 2;
+     * @return The bytes for error.
+     */
+    com.google.protobuf.ByteString
+        getErrorBytes();
+
+    /**
+     * .org.opendedup.grpc.errorCodes errorCode = 3;
+     * @return The enum numeric value on the wire for errorCode.
+     */
+    int getErrorCodeValue();
+    /**
+     * .org.opendedup.grpc.errorCodes errorCode = 3;
+     * @return The errorCode.
+     */
+    org.opendedup.grpc.FileInfo.errorCodes getErrorCode();
+  }
+  /**
+   * Protobuf type {@code org.opendedup.grpc.GetRetrievalTierResponse}
+   */
+  public static final class GetRetrievalTierResponse extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:org.opendedup.grpc.GetRetrievalTierResponse)
+      GetRetrievalTierResponseOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use GetRetrievalTierResponse.newBuilder() to construct.
+    private GetRetrievalTierResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) {
+      super(builder);
+    }
+    private GetRetrievalTierResponse() {
+      tierType_ = "";
+      error_ = "";
+      errorCode_ = 0;
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new GetRetrievalTierResponse();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private GetRetrievalTierResponse(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              tierType_ = s;
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              error_ = s;
+              break;
+            }
+            case 24: {
+              int rawValue = input.readEnum();
+
+              errorCode_ = rawValue;
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -42758,55 +47580,112 @@ private SyncNotificationSubscription(
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return org.opendedup.grpc.IOService.internal_static_org_opendedup_grpc_SyncNotificationSubscription_descriptor;
+      return org.opendedup.grpc.IOService.internal_static_org_opendedup_grpc_GetRetrievalTierResponse_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return org.opendedup.grpc.IOService.internal_static_org_opendedup_grpc_SyncNotificationSubscription_fieldAccessorTable
+      return org.opendedup.grpc.IOService.internal_static_org_opendedup_grpc_GetRetrievalTierResponse_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              org.opendedup.grpc.IOService.SyncNotificationSubscription.class, org.opendedup.grpc.IOService.SyncNotificationSubscription.Builder.class);
+              org.opendedup.grpc.IOService.GetRetrievalTierResponse.class, org.opendedup.grpc.IOService.GetRetrievalTierResponse.Builder.class);
     }
 
-    public static final int UID_FIELD_NUMBER = 1;
-    private volatile java.lang.Object uid_;
+    public static final int TIERTYPE_FIELD_NUMBER = 1;
+    private volatile java.lang.Object tierType_;
     /**
-     * string uid = 1;
-     * @return The uid.
+     * string tierType = 1;
+     * @return The tierType.
      */
     @java.lang.Override
-    public java.lang.String getUid() {
-      java.lang.Object ref = uid_;
+    public java.lang.String getTierType() {
+      java.lang.Object ref = tierType_;
       if (ref instanceof java.lang.String) {
         return (java.lang.String) ref;
       } else {
         com.google.protobuf.ByteString bs = 
             (com.google.protobuf.ByteString) ref;
         java.lang.String s = bs.toStringUtf8();
-        uid_ = s;
+        tierType_ = s;
         return s;
       }
     }
     /**
-     * string uid = 1;
-     * @return The bytes for uid.
+     * string tierType = 1;
+     * @return The bytes for tierType.
      */
     @java.lang.Override
     public com.google.protobuf.ByteString
-        getUidBytes() {
-      java.lang.Object ref = uid_;
+        getTierTypeBytes() {
+      java.lang.Object ref = tierType_;
       if (ref instanceof java.lang.String) {
         com.google.protobuf.ByteString b = 
             com.google.protobuf.ByteString.copyFromUtf8(
                 (java.lang.String) ref);
-        uid_ = b;
+        tierType_ = b;
         return b;
       } else {
         return (com.google.protobuf.ByteString) ref;
       }
     }
 
+    public static final int ERROR_FIELD_NUMBER = 2;
+    private volatile java.lang.Object error_;
+    /**
+     * string error = 2;
+     * @return The error.
+     */
+    @java.lang.Override
+    public java.lang.String getError() {
+      java.lang.Object ref = error_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        error_ = s;
+        return s;
+      }
+    }
+    /**
+     * string error = 2;
+     * @return The bytes for error.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getErrorBytes() {
+      java.lang.Object ref = error_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        error_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int ERRORCODE_FIELD_NUMBER = 3;
+    private int errorCode_;
+    /**
+     * .org.opendedup.grpc.errorCodes errorCode = 3;
+     * @return The enum numeric value on the wire for errorCode.
+     */
+    @java.lang.Override public int getErrorCodeValue() {
+      return errorCode_;
+    }
+    /**
+     * .org.opendedup.grpc.errorCodes errorCode = 3;
+     * @return The errorCode.
+     */
+    @java.lang.Override public org.opendedup.grpc.FileInfo.errorCodes getErrorCode() {
+      @SuppressWarnings("deprecation")
+      org.opendedup.grpc.FileInfo.errorCodes result = org.opendedup.grpc.FileInfo.errorCodes.valueOf(errorCode_);
+      return result == null ? org.opendedup.grpc.FileInfo.errorCodes.UNRECOGNIZED : result;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -42821,8 +47700,14 @@ public final boolean isInitialized() {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (!getUidBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, uid_);
+      if (!getTierTypeBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, tierType_);
+      }
+      if (!getErrorBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, error_);
+      }
+      if (errorCode_ != org.opendedup.grpc.FileInfo.errorCodes.NOERR.getNumber()) {
+        output.writeEnum(3, errorCode_);
       }
       unknownFields.writeTo(output);
     }
@@ -42833,8 +47718,15 @@ public int getSerializedSize() {
       if (size != -1) return size;
 
       size = 0;
-      if (!getUidBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, uid_);
+      if (!getTierTypeBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, tierType_);
+      }
+      if (!getErrorBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, error_);
+      }
+      if (errorCode_ != org.opendedup.grpc.FileInfo.errorCodes.NOERR.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(3, errorCode_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -42846,13 +47738,16 @@ public boolean equals(final java.lang.Object obj) {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof org.opendedup.grpc.IOService.SyncNotificationSubscription)) {
+      if (!(obj instanceof org.opendedup.grpc.IOService.GetRetrievalTierResponse)) {
         return super.equals(obj);
       }
-      org.opendedup.grpc.IOService.SyncNotificationSubscription other = (org.opendedup.grpc.IOService.SyncNotificationSubscription) obj;
+      org.opendedup.grpc.IOService.GetRetrievalTierResponse other = (org.opendedup.grpc.IOService.GetRetrievalTierResponse) obj;
 
-      if (!getUid()
-          .equals(other.getUid())) return false;
+      if (!getTierType()
+          .equals(other.getTierType())) return false;
+      if (!getError()
+          .equals(other.getError())) return false;
+      if (errorCode_ != other.errorCode_) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -42864,76 +47759,80 @@ public int hashCode() {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + UID_FIELD_NUMBER;
-      hash = (53 * hash) + getUid().hashCode();
+      hash = (37 * hash) + TIERTYPE_FIELD_NUMBER;
+      hash = (53 * hash) + getTierType().hashCode();
+      hash = (37 * hash) + ERROR_FIELD_NUMBER;
+      hash = (53 * hash) + getError().hashCode();
+      hash = (37 * hash) + ERRORCODE_FIELD_NUMBER;
+      hash = (53 * hash) + errorCode_;
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static org.opendedup.grpc.IOService.SyncNotificationSubscription parseFrom(
+    public static org.opendedup.grpc.IOService.GetRetrievalTierResponse parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static org.opendedup.grpc.IOService.SyncNotificationSubscription parseFrom(
+    public static org.opendedup.grpc.IOService.GetRetrievalTierResponse parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static org.opendedup.grpc.IOService.SyncNotificationSubscription parseFrom(
+    public static org.opendedup.grpc.IOService.GetRetrievalTierResponse parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static org.opendedup.grpc.IOService.SyncNotificationSubscription parseFrom(
+    public static org.opendedup.grpc.IOService.GetRetrievalTierResponse parseFrom(
         com.google.protobuf.ByteString data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static org.opendedup.grpc.IOService.SyncNotificationSubscription parseFrom(byte[] data)
+    public static org.opendedup.grpc.IOService.GetRetrievalTierResponse parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static org.opendedup.grpc.IOService.SyncNotificationSubscription parseFrom(
+    public static org.opendedup.grpc.IOService.GetRetrievalTierResponse parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static org.opendedup.grpc.IOService.SyncNotificationSubscription parseFrom(java.io.InputStream input)
+    public static org.opendedup.grpc.IOService.GetRetrievalTierResponse parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static org.opendedup.grpc.IOService.SyncNotificationSubscription parseFrom(
+    public static org.opendedup.grpc.IOService.GetRetrievalTierResponse parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input, extensionRegistry);
     }
-    public static org.opendedup.grpc.IOService.SyncNotificationSubscription parseDelimitedFrom(java.io.InputStream input)
+    public static org.opendedup.grpc.IOService.GetRetrievalTierResponse parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static org.opendedup.grpc.IOService.SyncNotificationSubscription parseDelimitedFrom(
+    public static org.opendedup.grpc.IOService.GetRetrievalTierResponse parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
-    public static org.opendedup.grpc.IOService.SyncNotificationSubscription parseFrom(
+    public static org.opendedup.grpc.IOService.GetRetrievalTierResponse parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static org.opendedup.grpc.IOService.SyncNotificationSubscription parseFrom(
+    public static org.opendedup.grpc.IOService.GetRetrievalTierResponse parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -42946,7 +47845,7 @@ public static org.opendedup.grpc.IOService.SyncNotificationSubscription parseFro
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(org.opendedup.grpc.IOService.SyncNotificationSubscription prototype) {
+    public static Builder newBuilder(org.opendedup.grpc.IOService.GetRetrievalTierResponse prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -42962,26 +47861,26 @@ protected Builder newBuilderForType(
       return builder;
     }
     /**
-     * Protobuf type {@code org.opendedup.grpc.SyncNotificationSubscription}
+     * Protobuf type {@code org.opendedup.grpc.GetRetrievalTierResponse}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder implements
-        // @@protoc_insertion_point(builder_implements:org.opendedup.grpc.SyncNotificationSubscription)
-        org.opendedup.grpc.IOService.SyncNotificationSubscriptionOrBuilder {
+        // @@protoc_insertion_point(builder_implements:org.opendedup.grpc.GetRetrievalTierResponse)
+        org.opendedup.grpc.IOService.GetRetrievalTierResponseOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return org.opendedup.grpc.IOService.internal_static_org_opendedup_grpc_SyncNotificationSubscription_descriptor;
+        return org.opendedup.grpc.IOService.internal_static_org_opendedup_grpc_GetRetrievalTierResponse_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return org.opendedup.grpc.IOService.internal_static_org_opendedup_grpc_SyncNotificationSubscription_fieldAccessorTable
+        return org.opendedup.grpc.IOService.internal_static_org_opendedup_grpc_GetRetrievalTierResponse_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                org.opendedup.grpc.IOService.SyncNotificationSubscription.class, org.opendedup.grpc.IOService.SyncNotificationSubscription.Builder.class);
+                org.opendedup.grpc.IOService.GetRetrievalTierResponse.class, org.opendedup.grpc.IOService.GetRetrievalTierResponse.Builder.class);
       }
 
-      // Construct using org.opendedup.grpc.IOService.SyncNotificationSubscription.newBuilder()
+      // Construct using org.opendedup.grpc.IOService.GetRetrievalTierResponse.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -42999,7 +47898,11 @@ private void maybeForceBuilderInitialization() {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        uid_ = "";
+        tierType_ = "";
+
+        error_ = "";
+
+        errorCode_ = 0;
 
         return this;
       }
@@ -43007,17 +47910,17 @@ public Builder clear() {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return org.opendedup.grpc.IOService.internal_static_org_opendedup_grpc_SyncNotificationSubscription_descriptor;
+        return org.opendedup.grpc.IOService.internal_static_org_opendedup_grpc_GetRetrievalTierResponse_descriptor;
       }
 
       @java.lang.Override
-      public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInstanceForType() {
-        return org.opendedup.grpc.IOService.SyncNotificationSubscription.getDefaultInstance();
+      public org.opendedup.grpc.IOService.GetRetrievalTierResponse getDefaultInstanceForType() {
+        return org.opendedup.grpc.IOService.GetRetrievalTierResponse.getDefaultInstance();
       }
 
       @java.lang.Override
-      public org.opendedup.grpc.IOService.SyncNotificationSubscription build() {
-        org.opendedup.grpc.IOService.SyncNotificationSubscription result = buildPartial();
+      public org.opendedup.grpc.IOService.GetRetrievalTierResponse build() {
+        org.opendedup.grpc.IOService.GetRetrievalTierResponse result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -43025,9 +47928,11 @@ public org.opendedup.grpc.IOService.SyncNotificationSubscription build() {
       }
 
       @java.lang.Override
-      public org.opendedup.grpc.IOService.SyncNotificationSubscription buildPartial() {
-        org.opendedup.grpc.IOService.SyncNotificationSubscription result = new org.opendedup.grpc.IOService.SyncNotificationSubscription(this);
-        result.uid_ = uid_;
+      public org.opendedup.grpc.IOService.GetRetrievalTierResponse buildPartial() {
+        org.opendedup.grpc.IOService.GetRetrievalTierResponse result = new org.opendedup.grpc.IOService.GetRetrievalTierResponse(this);
+        result.tierType_ = tierType_;
+        result.error_ = error_;
+        result.errorCode_ = errorCode_;
         onBuilt();
         return result;
       }
@@ -43066,20 +47971,27 @@ public Builder addRepeatedField(
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof org.opendedup.grpc.IOService.SyncNotificationSubscription) {
-          return mergeFrom((org.opendedup.grpc.IOService.SyncNotificationSubscription)other);
+        if (other instanceof org.opendedup.grpc.IOService.GetRetrievalTierResponse) {
+          return mergeFrom((org.opendedup.grpc.IOService.GetRetrievalTierResponse)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(org.opendedup.grpc.IOService.SyncNotificationSubscription other) {
-        if (other == org.opendedup.grpc.IOService.SyncNotificationSubscription.getDefaultInstance()) return this;
-        if (!other.getUid().isEmpty()) {
-          uid_ = other.uid_;
+      public Builder mergeFrom(org.opendedup.grpc.IOService.GetRetrievalTierResponse other) {
+        if (other == org.opendedup.grpc.IOService.GetRetrievalTierResponse.getDefaultInstance()) return this;
+        if (!other.getTierType().isEmpty()) {
+          tierType_ = other.tierType_;
           onChanged();
         }
+        if (!other.getError().isEmpty()) {
+          error_ = other.error_;
+          onChanged();
+        }
+        if (other.errorCode_ != 0) {
+          setErrorCodeValue(other.getErrorCodeValue());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -43095,11 +48007,11 @@ public Builder mergeFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        org.opendedup.grpc.IOService.SyncNotificationSubscription parsedMessage = null;
+        org.opendedup.grpc.IOService.GetRetrievalTierResponse parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (org.opendedup.grpc.IOService.SyncNotificationSubscription) e.getUnfinishedMessage();
+          parsedMessage = (org.opendedup.grpc.IOService.GetRetrievalTierResponse) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -43109,78 +48021,208 @@ public Builder mergeFrom(
         return this;
       }
 
-      private java.lang.Object uid_ = "";
+      private java.lang.Object tierType_ = "";
       /**
-       * string uid = 1;
-       * @return The uid.
+       * string tierType = 1;
+       * @return The tierType.
        */
-      public java.lang.String getUid() {
-        java.lang.Object ref = uid_;
+      public java.lang.String getTierType() {
+        java.lang.Object ref = tierType_;
         if (!(ref instanceof java.lang.String)) {
           com.google.protobuf.ByteString bs =
               (com.google.protobuf.ByteString) ref;
           java.lang.String s = bs.toStringUtf8();
-          uid_ = s;
+          tierType_ = s;
           return s;
         } else {
           return (java.lang.String) ref;
         }
       }
       /**
-       * string uid = 1;
-       * @return The bytes for uid.
+       * string tierType = 1;
+       * @return The bytes for tierType.
        */
       public com.google.protobuf.ByteString
-          getUidBytes() {
-        java.lang.Object ref = uid_;
+          getTierTypeBytes() {
+        java.lang.Object ref = tierType_;
         if (ref instanceof String) {
           com.google.protobuf.ByteString b = 
               com.google.protobuf.ByteString.copyFromUtf8(
                   (java.lang.String) ref);
-          uid_ = b;
+          tierType_ = b;
           return b;
         } else {
           return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * string uid = 1;
-       * @param value The uid to set.
+       * string tierType = 1;
+       * @param value The tierType to set.
        * @return This builder for chaining.
        */
-      public Builder setUid(
+      public Builder setTierType(
           java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
   }
   
-        uid_ = value;
+        tierType_ = value;
         onChanged();
         return this;
       }
       /**
-       * string uid = 1;
+       * string tierType = 1;
        * @return This builder for chaining.
        */
-      public Builder clearUid() {
+      public Builder clearTierType() {
         
-        uid_ = getDefaultInstance().getUid();
+        tierType_ = getDefaultInstance().getTierType();
         onChanged();
         return this;
       }
       /**
-       * string uid = 1;
-       * @param value The bytes for uid to set.
+       * string tierType = 1;
+       * @param value The bytes for tierType to set.
        * @return This builder for chaining.
        */
-      public Builder setUidBytes(
+      public Builder setTierTypeBytes(
           com.google.protobuf.ByteString value) {
         if (value == null) {
     throw new NullPointerException();
   }
   checkByteStringIsUtf8(value);
         
-        uid_ = value;
+        tierType_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object error_ = "";
+      /**
+       * string error = 2;
+       * @return The error.
+       */
+      public java.lang.String getError() {
+        java.lang.Object ref = error_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          error_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * string error = 2;
+       * @return The bytes for error.
+       */
+      public com.google.protobuf.ByteString
+          getErrorBytes() {
+        java.lang.Object ref = error_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          error_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * string error = 2;
+       * @param value The error to set.
+       * @return This builder for chaining.
+       */
+      public Builder setError(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        error_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * string error = 2;
+       * @return This builder for chaining.
+       */
+      public Builder clearError() {
+        
+        error_ = getDefaultInstance().getError();
+        onChanged();
+        return this;
+      }
+      /**
+       * string error = 2;
+       * @param value The bytes for error to set.
+       * @return This builder for chaining.
+       */
+      public Builder setErrorBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        error_ = value;
+        onChanged();
+        return this;
+      }
+
+      private int errorCode_ = 0;
+      /**
+       * .org.opendedup.grpc.errorCodes errorCode = 3;
+       * @return The enum numeric value on the wire for errorCode.
+       */
+      @java.lang.Override public int getErrorCodeValue() {
+        return errorCode_;
+      }
+      /**
+       * .org.opendedup.grpc.errorCodes errorCode = 3;
+       * @param value The enum numeric value on the wire for errorCode to set.
+       * @return This builder for chaining.
+       */
+      public Builder setErrorCodeValue(int value) {
+        
+        errorCode_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * .org.opendedup.grpc.errorCodes errorCode = 3;
+       * @return The errorCode.
+       */
+      @java.lang.Override
+      public org.opendedup.grpc.FileInfo.errorCodes getErrorCode() {
+        @SuppressWarnings("deprecation")
+        org.opendedup.grpc.FileInfo.errorCodes result = org.opendedup.grpc.FileInfo.errorCodes.valueOf(errorCode_);
+        return result == null ? org.opendedup.grpc.FileInfo.errorCodes.UNRECOGNIZED : result;
+      }
+      /**
+       * .org.opendedup.grpc.errorCodes errorCode = 3;
+       * @param value The errorCode to set.
+       * @return This builder for chaining.
+       */
+      public Builder setErrorCode(org.opendedup.grpc.FileInfo.errorCodes value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        errorCode_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * .org.opendedup.grpc.errorCodes errorCode = 3;
+       * @return This builder for chaining.
+       */
+      public Builder clearErrorCode() {
+        
+        errorCode_ = 0;
         onChanged();
         return this;
       }
@@ -43197,41 +48239,41 @@ public final Builder mergeUnknownFields(
       }
 
 
-      // @@protoc_insertion_point(builder_scope:org.opendedup.grpc.SyncNotificationSubscription)
+      // @@protoc_insertion_point(builder_scope:org.opendedup.grpc.GetRetrievalTierResponse)
     }
 
-    // @@protoc_insertion_point(class_scope:org.opendedup.grpc.SyncNotificationSubscription)
-    private static final org.opendedup.grpc.IOService.SyncNotificationSubscription DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:org.opendedup.grpc.GetRetrievalTierResponse)
+    private static final org.opendedup.grpc.IOService.GetRetrievalTierResponse DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new org.opendedup.grpc.IOService.SyncNotificationSubscription();
+      DEFAULT_INSTANCE = new org.opendedup.grpc.IOService.GetRetrievalTierResponse();
     }
 
-    public static org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInstance() {
+    public static org.opendedup.grpc.IOService.GetRetrievalTierResponse getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser
-        PARSER = new com.google.protobuf.AbstractParser() {
+    private static final com.google.protobuf.Parser
+        PARSER = new com.google.protobuf.AbstractParser() {
       @java.lang.Override
-      public SyncNotificationSubscription parsePartialFrom(
+      public GetRetrievalTierResponse parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SyncNotificationSubscription(input, extensionRegistry);
+        return new GetRetrievalTierResponse(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser parser() {
+    public static com.google.protobuf.Parser parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser getParserForType() {
+    public com.google.protobuf.Parser getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInstanceForType() {
+    public org.opendedup.grpc.IOService.GetRetrievalTierResponse getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
@@ -43532,6 +48574,26 @@ public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInsta
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_org_opendedup_grpc_SyncNotificationSubscription_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_org_opendedup_grpc_SetRetrievalTierRequest_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_org_opendedup_grpc_SetRetrievalTierRequest_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_org_opendedup_grpc_SetRetrievalTierResponse_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_org_opendedup_grpc_SetRetrievalTierResponse_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_org_opendedup_grpc_GetRetrievalTierRequest_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_org_opendedup_grpc_GetRetrievalTierRequest_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_org_opendedup_grpc_GetRetrievalTierResponse_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_org_opendedup_grpc_GetRetrievalTierResponse_fieldAccessorTable;
 
   public static com.google.protobuf.Descriptors.FileDescriptor
       getDescriptor() {
@@ -43542,196 +48604,228 @@ public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInsta
   static {
     java.lang.String[] descriptorData = {
       "\n\017IOService.proto\022\022org.opendedup.grpc\032\016F" +
-      "ileInfo.proto\"P\n\020DataWriteRequest\022\022\n\nfil" +
+      "ileInfo.proto\"w\n\020DataWriteRequest\022\022\n\nfil" +
       "eHandle\030\001 \001(\003\022\r\n\005start\030\002 \001(\003\022\013\n\003len\030\003 \001(" +
-      "\005\022\014\n\004data\030\004 \001(\014\"U\n\021DataWriteResponse\022\r\n\005" +
-      "error\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.org.ope" +
-      "ndedup.grpc.errorCodes\"*\n\014MkDirRequest\022\014" +
-      "\n\004path\030\001 \001(\t\022\014\n\004mode\030\002 \001(\005\"Q\n\rMkDirRespo" +
-      "nse\022\r\n\005error\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036." +
-      "org.opendedup.grpc.errorCodes\"\034\n\014RmDirRe" +
-      "quest\022\014\n\004path\030\001 \001(\t\"Q\n\rRmDirResponse\022\r\n\005" +
-      "error\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.org.ope" +
-      "ndedup.grpc.errorCodes\"\035\n\rUnlinkRequest\022" +
-      "\014\n\004path\030\001 \001(\t\"R\n\016UnlinkResponse\022\r\n\005error" +
-      "\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.org.opendedu" +
-      "p.grpc.errorCodes\"A\n\017DataReadRequest\022\022\n\n" +
-      "fileHandle\030\001 \001(\003\022\r\n\005start\030\002 \001(\003\022\013\n\003len\030\003" +
-      " \001(\005\"p\n\020DataReadResponse\022\014\n\004data\030\001 \001(\014\022\014" +
-      "\n\004read\030\002 \001(\005\022\r\n\005error\030\003 \001(\t\0221\n\terrorCode" +
-      "\030\004 \001(\0162\036.org.opendedup.grpc.errorCodes\"&" +
-      "\n\020FileCloseRequest\022\022\n\nfileHandle\030\001 \001(\003\"U" +
-      "\n\021FileCloseResponse\022\r\n\005error\030\001 \001(\t\0221\n\ter" +
-      "rorCode\030\002 \001(\0162\036.org.opendedup.grpc.error" +
-      "Codes\"8\n\014MkNodRequest\022\014\n\004path\030\001 \001(\t\022\014\n\004m" +
-      "ode\030\002 \001(\005\022\014\n\004rdev\030\003 \001(\005\"Q\n\rMkNodResponse" +
-      "\022\r\n\005error\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.org" +
-      ".opendedup.grpc.errorCodes\".\n\017FileOpenRe" +
-      "quest\022\014\n\004path\030\001 \001(\t\022\r\n\005flags\030\002 \001(\005\"!\n\021Fi" +
-      "leExistsRequest\022\014\n\004path\030\001 \001(\t\"f\n\022FileExi" +
-      "stsResponse\022\016\n\006exists\030\001 \001(\010\022\r\n\005error\030\002 \001" +
-      "(\t\0221\n\terrorCode\030\003 \001(\0162\036.org.opendedup.gr" +
-      "pc.errorCodes\"h\n\020FileOpenResponse\022\022\n\nfil" +
-      "eHandle\030\001 \001(\003\022\r\n\005error\030\002 \001(\t\0221\n\terrorCod" +
-      "e\030\003 \001(\0162\036.org.opendedup.grpc.errorCodes\"" +
-      "0\n\023FileSnapshotRequest\022\013\n\003src\030\001 \001(\t\022\014\n\004d" +
-      "est\030\002 \001(\t\"i\n\024FileSnapshotResponse\022\r\n\005err" +
+      "\005\022\014\n\004data\030\004 \001(\014\022\021\n\tpvolumeID\030\005 \001(\003\022\022\n\nco" +
+      "mpressed\030\006 \001(\010\"f\n\021DataWriteResponse\022\r\n\005e" +
+      "rror\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.org.open" +
+      "dedup.grpc.errorCodes\022\017\n\007written\030\003 \001(\003\"=" +
+      "\n\014MkDirRequest\022\014\n\004path\030\001 \001(\t\022\014\n\004mode\030\002 \001" +
+      "(\005\022\021\n\tpvolumeID\030\003 \001(\003\"Q\n\rMkDirResponse\022\r" +
+      "\n\005error\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.org.o" +
+      "pendedup.grpc.errorCodes\"/\n\014RmDirRequest" +
+      "\022\014\n\004path\030\001 \001(\t\022\021\n\tpvolumeID\030\002 \001(\003\"Q\n\rRmD" +
+      "irResponse\022\r\n\005error\030\001 \001(\t\0221\n\terrorCode\030\002" +
+      " \001(\0162\036.org.opendedup.grpc.errorCodes\"0\n\r" +
+      "UnlinkRequest\022\014\n\004path\030\001 \001(\t\022\021\n\tpvolumeID" +
+      "\030\002 \001(\003\"R\n\016UnlinkResponse\022\r\n\005error\030\001 \001(\t\022" +
+      "1\n\terrorCode\030\002 \001(\0162\036.org.opendedup.grpc." +
+      "errorCodes\"f\n\017DataReadRequest\022\022\n\nfileHan" +
+      "dle\030\001 \001(\003\022\r\n\005start\030\002 \001(\003\022\013\n\003len\030\003 \001(\005\022\021\n" +
+      "\tpvolumeID\030\004 \001(\003\022\020\n\010compress\030\005 \001(\010\"\204\001\n\020D" +
+      "ataReadResponse\022\014\n\004data\030\001 \001(\014\022\014\n\004read\030\002 " +
+      "\001(\005\022\r\n\005error\030\003 \001(\t\0221\n\terrorCode\030\004 \001(\0162\036." +
+      "org.opendedup.grpc.errorCodes\022\022\n\ncompres" +
+      "sed\030\005 \001(\010\"9\n\020FileCloseRequest\022\022\n\nfileHan" +
+      "dle\030\001 \001(\003\022\021\n\tpvolumeID\030\002 \001(\003\"U\n\021FileClos" +
+      "eResponse\022\r\n\005error\030\001 \001(\t\0221\n\terrorCode\030\002 " +
+      "\001(\0162\036.org.opendedup.grpc.errorCodes\"K\n\014M" +
+      "kNodRequest\022\014\n\004path\030\001 \001(\t\022\014\n\004mode\030\002 \001(\005\022" +
+      "\014\n\004rdev\030\003 \001(\005\022\021\n\tpvolumeID\030\004 \001(\003\"Q\n\rMkNo" +
+      "dResponse\022\r\n\005error\030\001 \001(\t\0221\n\terrorCode\030\002 " +
+      "\001(\0162\036.org.opendedup.grpc.errorCodes\"A\n\017F" +
+      "ileOpenRequest\022\014\n\004path\030\001 \001(\t\022\r\n\005flags\030\002 " +
+      "\001(\005\022\021\n\tpvolumeID\030\003 \001(\003\"4\n\021FileExistsRequ" +
+      "est\022\014\n\004path\030\001 \001(\t\022\021\n\tpvolumeID\030\002 \001(\003\"y\n\022" +
+      "FileExistsResponse\022\016\n\006exists\030\001 \001(\010\022\r\n\005er" +
+      "ror\030\002 \001(\t\0221\n\terrorCode\030\003 \001(\0162\036.org.opend" +
+      "edup.grpc.errorCodes\022\021\n\tpvolumeID\030\004 \001(\003\"" +
+      "h\n\020FileOpenResponse\022\022\n\nfileHandle\030\001 \001(\003\022" +
+      "\r\n\005error\030\002 \001(\t\0221\n\terrorCode\030\003 \001(\0162\036.org." +
+      "opendedup.grpc.errorCodes\"C\n\023FileSnapsho" +
+      "tRequest\022\013\n\003src\030\001 \001(\t\022\014\n\004dest\030\002 \001(\t\022\021\n\tp" +
+      "volumeID\030\003 \001(\003\"i\n\024FileSnapshotResponse\022\r" +
+      "\n\005error\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.org.o" +
+      "pendedup.grpc.errorCodes\022\017\n\007eventID\030\003 \001(" +
+      "\t\"A\n\021FileRenameRequest\022\013\n\003src\030\001 \001(\t\022\014\n\004d" +
+      "est\030\002 \001(\t\022\021\n\tpvolumeID\030\003 \001(\003\"V\n\022FileRena" +
+      "meResponse\022\r\n\005error\030\002 \001(\t\0221\n\terrorCode\030\003" +
+      " \001(\0162\036.org.opendedup.grpc.errorCodes\"|\n\021" +
+      "CopyExtentRequest\022\017\n\007srcFile\030\001 \001(\t\022\017\n\007ds" +
+      "tFile\030\002 \001(\t\022\020\n\010srcStart\030\003 \001(\003\022\020\n\010dstStar" +
+      "t\030\004 \001(\003\022\016\n\006length\030\005 \001(\003\022\021\n\tpvolumeID\030\006 \001" +
+      "(\003\"g\n\022CopyExtentResponse\022\r\n\005error\030\001 \001(\t\022" +
+      "1\n\terrorCode\030\002 \001(\0162\036.org.opendedup.grpc." +
+      "errorCodes\022\017\n\007written\030\003 \001(\003\"u\n\026SetUserMe" +
+      "taDataRequest\022:\n\016fileAttributes\030\001 \003(\0132\"." +
+      "org.opendedup.grpc.FileAttributes\022\014\n\004Pat" +
+      "h\030\002 \001(\t\022\021\n\tpvolumeID\030\003 \001(\003\"[\n\027SetUserMet" +
+      "aDataResponse\022\r\n\005error\030\001 \001(\t\0221\n\terrorCod" +
+      "e\030\002 \001(\0162\036.org.opendedup.grpc.errorCodes\"" +
+      "l\n\023GetCloudFileRequest\022\014\n\004file\030\001 \001(\t\022\017\n\007" +
+      "dstfile\030\002 \001(\t\022\021\n\toverwrite\030\003 \001(\010\022\020\n\010chan" +
+      "geid\030\004 \001(\t\022\021\n\tpvolumeID\030\005 \001(\003\"i\n\024GetClou" +
+      "dFileResponse\022\017\n\007eventID\030\001 \001(\t\022\r\n\005error\030" +
+      "\002 \001(\t\0221\n\terrorCode\030\003 \001(\0162\036.org.opendedup" +
+      ".grpc.errorCodes\"=\n\014ChmodRequest\022\014\n\004path" +
+      "\030\001 \001(\t\022\014\n\004mode\030\002 \001(\005\022\021\n\tpvolumeID\030\003 \001(\003\"" +
+      "Q\n\rChmodResponse\022\r\n\005error\030\001 \001(\t\0221\n\terror" +
+      "Code\030\002 \001(\0162\036.org.opendedup.grpc.errorCod" +
+      "es\"I\n\014ChownRequest\022\014\n\004path\030\001 \001(\t\022\013\n\003uid\030" +
+      "\002 \001(\005\022\013\n\003gid\030\003 \001(\005\022\021\n\tpvolumeID\030\004 \001(\003\"Q\n" +
+      "\rChownResponse\022\r\n\005error\030\001 \001(\t\0221\n\terrorCo" +
+      "de\030\002 \001(\0162\036.org.opendedup.grpc.errorCodes" +
+      "\";\n\014FlushRequest\022\014\n\004path\030\001 \001(\t\022\n\n\002fd\030\002 \001" +
+      "(\003\022\021\n\tpvolumeID\030\003 \001(\003\"Q\n\rFlushResponse\022\r" +
+      "\n\005error\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.org.o" +
+      "pendedup.grpc.errorCodes\"\277\001\n\004Stat\022\013\n\003dev" +
+      "\030\001 \001(\003\022\013\n\003ino\030\002 \001(\003\022\014\n\004mode\030\003 \001(\005\022\r\n\005nli" +
+      "nk\030\004 \001(\005\022\013\n\003uid\030\005 \001(\005\022\013\n\003gid\030\006 \001(\005\022\014\n\004rd" +
+      "ev\030\007 \001(\005\022\014\n\004size\030\010 \001(\003\022\017\n\007blksize\030\t \001(\005\022" +
+      "\016\n\006blocks\030\n \001(\003\022\r\n\005atime\030\013 \001(\003\022\014\n\004mtim\030\014" +
+      " \001(\003\022\014\n\004ctim\030\r \001(\003\".\n\013StatRequest\022\014\n\004pat" +
+      "h\030\001 \001(\t\022\021\n\tpvolumeID\030\002 \001(\003\"x\n\014StatRespon" +
+      "se\022&\n\004stat\030\001 \001(\0132\030.org.opendedup.grpc.St" +
+      "at\022\r\n\005error\030\002 \001(\t\0221\n\terrorCode\030\003 \001(\0162\036.o" +
+      "rg.opendedup.grpc.errorCodes\".\n\013LinkRequ" +
+      "est\022\014\n\004path\030\001 \001(\t\022\021\n\tpvolumeID\030\002 \001(\003\"b\n\014" +
+      "LinkResponse\022\020\n\010linkPath\030\001 \001(\t\022\r\n\005error\030" +
+      "\002 \001(\t\0221\n\terrorCode\030\003 \001(\0162\036.org.opendedup" +
+      ".grpc.errorCodes\"\260\001\n\006StatFS\022\r\n\005bsize\030\001 \001" +
+      "(\005\022\016\n\006blocks\030\002 \001(\003\022\r\n\005bfree\030\003 \001(\003\022\016\n\006bav" +
+      "ail\030\004 \001(\003\022\r\n\005files\030\005 \001(\003\022\r\n\005ffree\030\006 \001(\003\022" +
+      "\014\n\004fsid\030\007 \001(\003\022\017\n\007namelen\030\010 \001(\005\022\016\n\006frsize" +
+      "\030\t \001(\005\022\r\n\005flags\030\n \001(\005\022\014\n\004type\030\013 \001(\005\"\"\n\rS" +
+      "tatFSRequest\022\021\n\tpvolumeID\030\001 \001(\003\"|\n\016StatF" +
+      "SResponse\022(\n\004stat\030\001 \001(\0132\032.org.opendedup." +
+      "grpc.StatFS\022\r\n\005error\030\002 \001(\t\0221\n\terrorCode\030" +
+      "\003 \001(\0162\036.org.opendedup.grpc.errorCodes\"=\n" +
+      "\016SymLinkRequest\022\014\n\004from\030\001 \001(\t\022\n\n\002to\030\002 \001(" +
+      "\t\022\021\n\tpvolumeID\030\003 \001(\003\"S\n\017SymLinkResponse\022" +
+      "\r\n\005error\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.org." +
+      "opendedup.grpc.errorCodes\"B\n\017TruncateReq" +
+      "uest\022\014\n\004path\030\001 \001(\t\022\016\n\006length\030\002 \001(\003\022\021\n\tpv" +
+      "olumeID\030\003 \001(\003\"T\n\020TruncateResponse\022\r\n\005err" +
       "or\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.org.opende" +
-      "dup.grpc.errorCodes\022\017\n\007eventID\030\003 \001(\t\".\n\021" +
-      "FileRenameRequest\022\013\n\003src\030\001 \001(\t\022\014\n\004dest\030\002" +
-      " \001(\t\"V\n\022FileRenameResponse\022\r\n\005error\030\002 \001(" +
-      "\t\0221\n\terrorCode\030\003 \001(\0162\036.org.opendedup.grp" +
-      "c.errorCodes\"i\n\021CopyExtentRequest\022\017\n\007src" +
-      "File\030\001 \001(\t\022\017\n\007dstFile\030\002 \001(\t\022\020\n\010srcStart\030" +
-      "\003 \001(\003\022\020\n\010dstStart\030\004 \001(\003\022\016\n\006length\030\005 \001(\003\"" +
-      "g\n\022CopyExtentResponse\022\r\n\005error\030\001 \001(\t\0221\n\t" +
-      "errorCode\030\002 \001(\0162\036.org.opendedup.grpc.err" +
-      "orCodes\022\017\n\007written\030\003 \001(\003\"b\n\026SetUserMetaD" +
-      "ataRequest\022:\n\016fileAttributes\030\001 \003(\0132\".org" +
-      ".opendedup.grpc.FileAttributes\022\014\n\004Path\030\002" +
-      " \001(\t\"[\n\027SetUserMetaDataResponse\022\r\n\005error" +
-      "\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.org.opendedu" +
-      "p.grpc.errorCodes\"Y\n\023GetCloudFileRequest" +
-      "\022\014\n\004file\030\001 \001(\t\022\017\n\007dstfile\030\002 \001(\t\022\021\n\toverw" +
-      "rite\030\003 \001(\010\022\020\n\010changeid\030\004 \001(\t\"i\n\024GetCloud" +
-      "FileResponse\022\017\n\007eventID\030\001 \001(\t\022\r\n\005error\030\002" +
-      " \001(\t\0221\n\terrorCode\030\003 \001(\0162\036.org.opendedup." +
-      "grpc.errorCodes\"*\n\014ChmodRequest\022\014\n\004path\030" +
-      "\001 \001(\t\022\014\n\004mode\030\002 \001(\005\"Q\n\rChmodResponse\022\r\n\005" +
-      "error\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.org.ope" +
-      "ndedup.grpc.errorCodes\"6\n\014ChownRequest\022\014" +
-      "\n\004path\030\001 \001(\t\022\013\n\003uid\030\002 \001(\005\022\013\n\003gid\030\003 \001(\005\"Q" +
-      "\n\rChownResponse\022\r\n\005error\030\001 \001(\t\0221\n\terrorC" +
-      "ode\030\002 \001(\0162\036.org.opendedup.grpc.errorCode" +
-      "s\"(\n\014FlushRequest\022\014\n\004path\030\001 \001(\t\022\n\n\002fd\030\002 " +
-      "\001(\003\"Q\n\rFlushResponse\022\r\n\005error\030\001 \001(\t\0221\n\te" +
-      "rrorCode\030\002 \001(\0162\036.org.opendedup.grpc.erro" +
-      "rCodes\"\277\001\n\004Stat\022\013\n\003dev\030\001 \001(\003\022\013\n\003ino\030\002 \001(" +
-      "\003\022\014\n\004mode\030\003 \001(\005\022\r\n\005nlink\030\004 \001(\005\022\013\n\003uid\030\005 " +
-      "\001(\005\022\013\n\003gid\030\006 \001(\005\022\014\n\004rdev\030\007 \001(\005\022\014\n\004size\030\010" +
-      " \001(\003\022\017\n\007blksize\030\t \001(\005\022\016\n\006blocks\030\n \001(\003\022\r\n" +
-      "\005atime\030\013 \001(\003\022\014\n\004mtim\030\014 \001(\003\022\014\n\004ctim\030\r \001(\003" +
-      "\"\033\n\013StatRequest\022\014\n\004path\030\001 \001(\t\"x\n\014StatRes" +
-      "ponse\022&\n\004stat\030\001 \001(\0132\030.org.opendedup.grpc" +
-      ".Stat\022\r\n\005error\030\002 \001(\t\0221\n\terrorCode\030\003 \001(\0162" +
-      "\036.org.opendedup.grpc.errorCodes\"\033\n\013LinkR" +
-      "equest\022\014\n\004path\030\001 \001(\t\"b\n\014LinkResponse\022\020\n\010" +
-      "linkPath\030\001 \001(\t\022\r\n\005error\030\002 \001(\t\0221\n\terrorCo" +
-      "de\030\003 \001(\0162\036.org.opendedup.grpc.errorCodes" +
-      "\"\260\001\n\006StatFS\022\r\n\005bsize\030\001 \001(\005\022\016\n\006blocks\030\002 \001" +
-      "(\003\022\r\n\005bfree\030\003 \001(\003\022\016\n\006bavail\030\004 \001(\003\022\r\n\005fil" +
-      "es\030\005 \001(\003\022\r\n\005ffree\030\006 \001(\003\022\014\n\004fsid\030\007 \001(\003\022\017\n" +
-      "\007namelen\030\010 \001(\005\022\016\n\006frsize\030\t \001(\005\022\r\n\005flags\030" +
-      "\n \001(\005\022\014\n\004type\030\013 \001(\005\"\017\n\rStatFSRequest\"|\n\016" +
-      "StatFSResponse\022(\n\004stat\030\001 \001(\0132\032.org.opend" +
-      "edup.grpc.StatFS\022\r\n\005error\030\002 \001(\t\0221\n\terror" +
-      "Code\030\003 \001(\0162\036.org.opendedup.grpc.errorCod" +
-      "es\"*\n\016SymLinkRequest\022\014\n\004from\030\001 \001(\t\022\n\n\002to" +
-      "\030\002 \001(\t\"S\n\017SymLinkResponse\022\r\n\005error\030\001 \001(\t" +
-      "\0221\n\terrorCode\030\002 \001(\0162\036.org.opendedup.grpc" +
-      ".errorCodes\"/\n\017TruncateRequest\022\014\n\004path\030\001" +
-      " \001(\t\022\016\n\006length\030\002 \001(\003\"T\n\020TruncateResponse" +
-      "\022\r\n\005error\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.org" +
-      ".opendedup.grpc.errorCodes\":\n\014UtimeReque" +
-      "st\022\014\n\004path\030\001 \001(\t\022\r\n\005atime\030\002 \001(\003\022\r\n\005mtime" +
-      "\030\003 \001(\003\"Q\n\rUtimeResponse\022\r\n\005error\030\001 \001(\t\0221" +
-      "\n\terrorCode\030\002 \001(\0162\036.org.opendedup.grpc.e" +
-      "rrorCodes\"-\n\017GetXAttrRequest\022\014\n\004attr\030\001 \001" +
-      "(\t\022\014\n\004path\030\002 \001(\t\"c\n\020GetXAttrResponse\022\r\n\005" +
-      "value\030\001 \001(\t\022\r\n\005error\030\002 \001(\t\0221\n\terrorCode\030" +
-      "\003 \001(\0162\036.org.opendedup.grpc.errorCodes\"<\n" +
-      "\017SetXAttrRequest\022\014\n\004attr\030\001 \001(\t\022\r\n\005value\030" +
-      "\002 \001(\t\022\014\n\004path\030\003 \001(\t\"\305\001\n\020SetXAttrResponse" +
-      "\022\r\n\005error\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.org" +
-      ".opendedup.grpc.errorCodes\022=\n\005flags\030\003 \001(" +
-      "\0162..org.opendedup.grpc.SetXAttrResponse." +
-      "flagsenum\"0\n\tflagsenum\022\020\n\014XATTR_CREATE\020\000" +
-      "\022\021\n\rXATTR_REPLACE\020\001\"0\n\022RemoveXAttrReques" +
-      "t\022\014\n\004attr\030\001 \001(\t\022\014\n\004path\030\002 \001(\t\"W\n\023RemoveX" +
-      "AttrResponse\022\r\n\005error\030\001 \001(\t\0221\n\terrorCode" +
-      "\030\002 \001(\0162\036.org.opendedup.grpc.errorCodes\"1" +
-      "\n\023GetXAttrSizeRequest\022\014\n\004attr\030\001 \001(\t\022\014\n\004p" +
-      "ath\030\002 \001(\t\"h\n\024GetXAttrSizeResponse\022\016\n\006len" +
-      "gth\030\001 \001(\005\022\r\n\005error\030\002 \001(\t\0221\n\terrorCode\030\003 " +
-      "\001(\0162\036.org.opendedup.grpc.errorCodes\":\n\014F" +
-      "syncRequest\022\014\n\004path\030\001 \001(\t\022\n\n\002fh\030\002 \001(\003\022\020\n" +
-      "\010datasync\030\003 \001(\010\"Q\n\rFsyncResponse\022\r\n\005erro" +
-      "r\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.org.opended" +
-      "up.grpc.errorCodes\"+\n\034SyncNotificationSu" +
-      "bscription\022\013\n\003uid\030\001 \001(\t2\317\026\n\rFileIOServic" +
-      "e\022a\n\014GetXAttrSize\022\'.org.opendedup.grpc.G" +
-      "etXAttrSizeRequest\032(.org.opendedup.grpc." +
-      "GetXAttrSizeResponse\022L\n\005Fsync\022 .org.open" +
-      "dedup.grpc.FsyncRequest\032!.org.opendedup." +
-      "grpc.FsyncResponse\022U\n\010SetXAttr\022#.org.ope" +
-      "ndedup.grpc.SetXAttrRequest\032$.org.opende" +
-      "dup.grpc.SetXAttrResponse\022^\n\013RemoveXAttr" +
-      "\022&.org.opendedup.grpc.RemoveXAttrRequest" +
-      "\032\'.org.opendedup.grpc.RemoveXAttrRespons" +
-      "e\022U\n\010GetXAttr\022#.org.opendedup.grpc.GetXA" +
-      "ttrRequest\032$.org.opendedup.grpc.GetXAttr" +
-      "Response\022L\n\005Utime\022 .org.opendedup.grpc.U" +
-      "timeRequest\032!.org.opendedup.grpc.UtimeRe" +
-      "sponse\022U\n\010Truncate\022#.org.opendedup.grpc." +
-      "TruncateRequest\032$.org.opendedup.grpc.Tru" +
-      "ncateResponse\022R\n\007SymLink\022\".org.opendedup" +
-      ".grpc.SymLinkRequest\032#.org.opendedup.grp" +
-      "c.SymLinkResponse\022M\n\010ReadLink\022\037.org.open" +
-      "dedup.grpc.LinkRequest\032 .org.opendedup.g" +
-      "rpc.LinkResponse\022L\n\007GetAttr\022\037.org.opende" +
-      "dup.grpc.StatRequest\032 .org.opendedup.grp" +
-      "c.StatResponse\022L\n\005Flush\022 .org.opendedup." +
-      "grpc.FlushRequest\032!.org.opendedup.grpc.F" +
-      "lushResponse\022L\n\005Chown\022 .org.opendedup.gr" +
-      "pc.ChownRequest\032!.org.opendedup.grpc.Cho" +
-      "wnResponse\022L\n\005Chmod\022 .org.opendedup.grpc" +
-      ".ChmodRequest\032!.org.opendedup.grpc.Chmod" +
-      "Response\022L\n\005MkDir\022 .org.opendedup.grpc.M" +
-      "kDirRequest\032!.org.opendedup.grpc.MkDirRe" +
-      "sponse\022L\n\005RmDir\022 .org.opendedup.grpc.RmD" +
-      "irRequest\032!.org.opendedup.grpc.RmDirResp" +
-      "onse\022O\n\006Unlink\022!.org.opendedup.grpc.Unli" +
-      "nkRequest\032\".org.opendedup.grpc.UnlinkRes" +
-      "ponse\022T\n\005Write\022$.org.opendedup.grpc.Data" +
-      "WriteRequest\032%.org.opendedup.grpc.DataWr" +
-      "iteResponse\022Q\n\004Read\022#.org.opendedup.grpc" +
-      ".DataReadRequest\032$.org.opendedup.grpc.Da" +
-      "taReadResponse\022V\n\007Release\022$.org.opendedu" +
-      "p.grpc.FileCloseRequest\032%.org.opendedup." +
-      "grpc.FileCloseResponse\022L\n\005Mknod\022 .org.op" +
-      "endedup.grpc.MkNodRequest\032!.org.opendedu" +
-      "p.grpc.MkNodResponse\022Q\n\004Open\022#.org.opend" +
-      "edup.grpc.FileOpenRequest\032$.org.opendedu" +
-      "p.grpc.FileOpenResponse\022[\n\013GetFileInfo\022#" +
-      ".org.opendedup.grpc.FileInfoRequest\032\'.or" +
-      "g.opendedup.grpc.FileMessageResponse\022_\n\n" +
-      "CreateCopy\022\'.org.opendedup.grpc.FileSnap" +
-      "shotRequest\032(.org.opendedup.grpc.FileSna" +
-      "pshotResponse\022[\n\nFileExists\022%.org.opende" +
-      "dup.grpc.FileExistsRequest\032&.org.opended" +
-      "up.grpc.FileExistsResponse\022O\n\010MkDirAll\022 " +
-      ".org.opendedup.grpc.MkDirRequest\032!.org.o" +
-      "pendedup.grpc.MkDirResponse\022T\n\004Stat\022#.or" +
-      "g.opendedup.grpc.FileInfoRequest\032\'.org.o" +
-      "pendedup.grpc.FileMessageResponse\022W\n\006Ren" +
-      "ame\022%.org.opendedup.grpc.FileRenameReque" +
-      "st\032&.org.opendedup.grpc.FileRenameRespon" +
-      "se\022[\n\nCopyExtent\022%.org.opendedup.grpc.Co" +
-      "pyExtentRequest\032&.org.opendedup.grpc.Cop" +
-      "yExtentResponse\022j\n\017SetUserMetaData\022*.org" +
-      ".opendedup.grpc.SetUserMetaDataRequest\032+" +
-      ".org.opendedup.grpc.SetUserMetaDataRespo" +
-      "nse\022a\n\014GetCloudFile\022\'.org.opendedup.grpc" +
-      ".GetCloudFileRequest\032(.org.opendedup.grp" +
-      "c.GetCloudFileResponse\022e\n\020GetCloudMetaFi" +
-      "le\022\'.org.opendedup.grpc.GetCloudFileRequ" +
-      "est\032(.org.opendedup.grpc.GetCloudFileRes" +
-      "ponse\022O\n\006StatFS\022!.org.opendedup.grpc.Sta" +
-      "tFSRequest\032\".org.opendedup.grpc.StatFSRe" +
-      "sponse\022q\n\020fileNotification\0220.org.opended" +
-      "up.grpc.SyncNotificationSubscription\032\'.o" +
-      "rg.opendedup.grpc.FileMessageResponse\"\0000" +
-      "\001B0Z.github.com/opendedup/sdfs-client-go" +
+      "dup.grpc.errorCodes\"M\n\014UtimeRequest\022\014\n\004p" +
+      "ath\030\001 \001(\t\022\r\n\005atime\030\002 \001(\003\022\r\n\005mtime\030\003 \001(\003\022" +
+      "\021\n\tpvolumeID\030\004 \001(\003\"Q\n\rUtimeResponse\022\r\n\005e" +
+      "rror\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.org.open" +
+      "dedup.grpc.errorCodes\"@\n\017GetXAttrRequest" +
+      "\022\014\n\004attr\030\001 \001(\t\022\014\n\004path\030\002 \001(\t\022\021\n\tpvolumeI" +
+      "D\030\003 \001(\003\"c\n\020GetXAttrResponse\022\r\n\005value\030\001 \001" +
+      "(\t\022\r\n\005error\030\002 \001(\t\0221\n\terrorCode\030\003 \001(\0162\036.o" +
+      "rg.opendedup.grpc.errorCodes\"O\n\017SetXAttr" +
+      "Request\022\014\n\004attr\030\001 \001(\t\022\r\n\005value\030\002 \001(\t\022\014\n\004" +
+      "path\030\003 \001(\t\022\021\n\tpvolumeID\030\004 \001(\003\"\305\001\n\020SetXAt" +
+      "trResponse\022\r\n\005error\030\001 \001(\t\0221\n\terrorCode\030\002" +
+      " \001(\0162\036.org.opendedup.grpc.errorCodes\022=\n\005" +
+      "flags\030\003 \001(\0162..org.opendedup.grpc.SetXAtt" +
+      "rResponse.flagsenum\"0\n\tflagsenum\022\020\n\014XATT" +
+      "R_CREATE\020\000\022\021\n\rXATTR_REPLACE\020\001\"C\n\022RemoveX" +
+      "AttrRequest\022\014\n\004attr\030\001 \001(\t\022\014\n\004path\030\002 \001(\t\022" +
+      "\021\n\tpvolumeID\030\003 \001(\003\"W\n\023RemoveXAttrRespons" +
+      "e\022\r\n\005error\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.or" +
+      "g.opendedup.grpc.errorCodes\"D\n\023GetXAttrS" +
+      "izeRequest\022\014\n\004attr\030\001 \001(\t\022\014\n\004path\030\002 \001(\t\022\021" +
+      "\n\tpvolumeID\030\003 \001(\003\"h\n\024GetXAttrSizeRespons" +
+      "e\022\016\n\006length\030\001 \001(\005\022\r\n\005error\030\002 \001(\t\0221\n\terro" +
+      "rCode\030\003 \001(\0162\036.org.opendedup.grpc.errorCo" +
+      "des\"M\n\014FsyncRequest\022\014\n\004path\030\001 \001(\t\022\n\n\002fh\030" +
+      "\002 \001(\003\022\020\n\010datasync\030\003 \001(\010\022\021\n\tpvolumeID\030\004 \001" +
+      "(\003\"Q\n\rFsyncResponse\022\r\n\005error\030\001 \001(\t\0221\n\ter" +
+      "rorCode\030\002 \001(\0162\036.org.opendedup.grpc.error" +
+      "Codes\">\n\034SyncNotificationSubscription\022\013\n" +
+      "\003uid\030\001 \001(\t\022\021\n\tpvolumeID\030\002 \001(\003\">\n\027SetRetr" +
+      "ievalTierRequest\022\020\n\010tierType\030\001 \001(\t\022\021\n\tpv" +
+      "olumeID\030\002 \001(\003\"\\\n\030SetRetrievalTierRespons" +
+      "e\022\r\n\005error\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.or" +
+      "g.opendedup.grpc.errorCodes\",\n\027GetRetrie" +
+      "valTierRequest\022\021\n\tpvolumeID\030\001 \001(\003\"n\n\030Get" +
+      "RetrievalTierResponse\022\020\n\010tierType\030\001 \001(\t\022" +
+      "\r\n\005error\030\002 \001(\t\0221\n\terrorCode\030\003 \001(\0162\036.org." +
+      "opendedup.grpc.errorCodes2\215\031\n\rFileIOServ" +
+      "ice\022a\n\014GetXAttrSize\022\'.org.opendedup.grpc" +
+      ".GetXAttrSizeRequest\032(.org.opendedup.grp" +
+      "c.GetXAttrSizeResponse\022L\n\005Fsync\022 .org.op" +
+      "endedup.grpc.FsyncRequest\032!.org.opendedu" +
+      "p.grpc.FsyncResponse\022U\n\010SetXAttr\022#.org.o" +
+      "pendedup.grpc.SetXAttrRequest\032$.org.open" +
+      "dedup.grpc.SetXAttrResponse\022^\n\013RemoveXAt" +
+      "tr\022&.org.opendedup.grpc.RemoveXAttrReque" +
+      "st\032\'.org.opendedup.grpc.RemoveXAttrRespo" +
+      "nse\022U\n\010GetXAttr\022#.org.opendedup.grpc.Get" +
+      "XAttrRequest\032$.org.opendedup.grpc.GetXAt" +
+      "trResponse\022L\n\005Utime\022 .org.opendedup.grpc" +
+      ".UtimeRequest\032!.org.opendedup.grpc.Utime" +
+      "Response\022U\n\010Truncate\022#.org.opendedup.grp" +
+      "c.TruncateRequest\032$.org.opendedup.grpc.T" +
+      "runcateResponse\022R\n\007SymLink\022\".org.opended" +
+      "up.grpc.SymLinkRequest\032#.org.opendedup.g" +
+      "rpc.SymLinkResponse\022M\n\010ReadLink\022\037.org.op" +
+      "endedup.grpc.LinkRequest\032 .org.opendedup" +
+      ".grpc.LinkResponse\022L\n\007GetAttr\022\037.org.open" +
+      "dedup.grpc.StatRequest\032 .org.opendedup.g" +
+      "rpc.StatResponse\022L\n\005Flush\022 .org.opendedu" +
+      "p.grpc.FlushRequest\032!.org.opendedup.grpc" +
+      ".FlushResponse\022L\n\005Chown\022 .org.opendedup." +
+      "grpc.ChownRequest\032!.org.opendedup.grpc.C" +
+      "hownResponse\022L\n\005Chmod\022 .org.opendedup.gr" +
+      "pc.ChmodRequest\032!.org.opendedup.grpc.Chm" +
+      "odResponse\022L\n\005MkDir\022 .org.opendedup.grpc" +
+      ".MkDirRequest\032!.org.opendedup.grpc.MkDir" +
+      "Response\022L\n\005RmDir\022 .org.opendedup.grpc.R" +
+      "mDirRequest\032!.org.opendedup.grpc.RmDirRe" +
+      "sponse\022O\n\006Unlink\022!.org.opendedup.grpc.Un" +
+      "linkRequest\032\".org.opendedup.grpc.UnlinkR" +
+      "esponse\022T\n\005Write\022$.org.opendedup.grpc.Da" +
+      "taWriteRequest\032%.org.opendedup.grpc.Data" +
+      "WriteResponse\022^\n\013StreamWrite\022$.org.opend" +
+      "edup.grpc.DataWriteRequest\032%.org.opended" +
+      "up.grpc.DataWriteResponse\"\000(\001\022Q\n\004Read\022#." +
+      "org.opendedup.grpc.DataReadRequest\032$.org" +
+      ".opendedup.grpc.DataReadResponse\022V\n\007Rele" +
+      "ase\022$.org.opendedup.grpc.FileCloseReques" +
+      "t\032%.org.opendedup.grpc.FileCloseResponse" +
+      "\022L\n\005Mknod\022 .org.opendedup.grpc.MkNodRequ" +
+      "est\032!.org.opendedup.grpc.MkNodResponse\022Q" +
+      "\n\004Open\022#.org.opendedup.grpc.FileOpenRequ" +
+      "est\032$.org.opendedup.grpc.FileOpenRespons" +
+      "e\022[\n\013GetFileInfo\022#.org.opendedup.grpc.Fi" +
+      "leInfoRequest\032\'.org.opendedup.grpc.FileM" +
+      "essageResponse\022_\n\nCreateCopy\022\'.org.opend" +
+      "edup.grpc.FileSnapshotRequest\032(.org.open" +
+      "dedup.grpc.FileSnapshotResponse\022[\n\nFileE" +
+      "xists\022%.org.opendedup.grpc.FileExistsReq" +
+      "uest\032&.org.opendedup.grpc.FileExistsResp" +
+      "onse\022O\n\010MkDirAll\022 .org.opendedup.grpc.Mk" +
+      "DirRequest\032!.org.opendedup.grpc.MkDirRes" +
+      "ponse\022T\n\004Stat\022#.org.opendedup.grpc.FileI" +
+      "nfoRequest\032\'.org.opendedup.grpc.FileMess" +
+      "ageResponse\022W\n\006Rename\022%.org.opendedup.gr" +
+      "pc.FileRenameRequest\032&.org.opendedup.grp" +
+      "c.FileRenameResponse\022[\n\nCopyExtent\022%.org" +
+      ".opendedup.grpc.CopyExtentRequest\032&.org." +
+      "opendedup.grpc.CopyExtentResponse\022j\n\017Set" +
+      "UserMetaData\022*.org.opendedup.grpc.SetUse" +
+      "rMetaDataRequest\032+.org.opendedup.grpc.Se" +
+      "tUserMetaDataResponse\022a\n\014GetCloudFile\022\'." +
+      "org.opendedup.grpc.GetCloudFileRequest\032(" +
+      ".org.opendedup.grpc.GetCloudFileResponse" +
+      "\022e\n\020GetCloudMetaFile\022\'.org.opendedup.grp" +
+      "c.GetCloudFileRequest\032(.org.opendedup.gr" +
+      "pc.GetCloudFileResponse\022O\n\006StatFS\022!.org." +
+      "opendedup.grpc.StatFSRequest\032\".org.opend" +
+      "edup.grpc.StatFSResponse\022q\n\020fileNotifica" +
+      "tion\0220.org.opendedup.grpc.SyncNotificati" +
+      "onSubscription\032\'.org.opendedup.grpc.File" +
+      "MessageResponse\"\0000\001\022m\n\020SetRetrievalTier\022" +
+      "+.org.opendedup.grpc.SetRetrievalTierReq" +
+      "uest\032,.org.opendedup.grpc.SetRetrievalTi" +
+      "erResponse\022m\n\020GetRetrievalTier\022+.org.ope" +
+      "ndedup.grpc.GetRetrievalTierRequest\032,.or" +
+      "g.opendedup.grpc.GetRetrievalTierRespons" +
+      "eB0Z.github.com/opendedup/sdfs-client-go" +
       "/sdfs/;sdfsb\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
@@ -43744,19 +48838,19 @@ public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInsta
     internal_static_org_opendedup_grpc_DataWriteRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_DataWriteRequest_descriptor,
-        new java.lang.String[] { "FileHandle", "Start", "Len", "Data", });
+        new java.lang.String[] { "FileHandle", "Start", "Len", "Data", "PvolumeID", "Compressed", });
     internal_static_org_opendedup_grpc_DataWriteResponse_descriptor =
       getDescriptor().getMessageTypes().get(1);
     internal_static_org_opendedup_grpc_DataWriteResponse_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_DataWriteResponse_descriptor,
-        new java.lang.String[] { "Error", "ErrorCode", });
+        new java.lang.String[] { "Error", "ErrorCode", "Written", });
     internal_static_org_opendedup_grpc_MkDirRequest_descriptor =
       getDescriptor().getMessageTypes().get(2);
     internal_static_org_opendedup_grpc_MkDirRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_MkDirRequest_descriptor,
-        new java.lang.String[] { "Path", "Mode", });
+        new java.lang.String[] { "Path", "Mode", "PvolumeID", });
     internal_static_org_opendedup_grpc_MkDirResponse_descriptor =
       getDescriptor().getMessageTypes().get(3);
     internal_static_org_opendedup_grpc_MkDirResponse_fieldAccessorTable = new
@@ -43768,7 +48862,7 @@ public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInsta
     internal_static_org_opendedup_grpc_RmDirRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_RmDirRequest_descriptor,
-        new java.lang.String[] { "Path", });
+        new java.lang.String[] { "Path", "PvolumeID", });
     internal_static_org_opendedup_grpc_RmDirResponse_descriptor =
       getDescriptor().getMessageTypes().get(5);
     internal_static_org_opendedup_grpc_RmDirResponse_fieldAccessorTable = new
@@ -43780,7 +48874,7 @@ public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInsta
     internal_static_org_opendedup_grpc_UnlinkRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_UnlinkRequest_descriptor,
-        new java.lang.String[] { "Path", });
+        new java.lang.String[] { "Path", "PvolumeID", });
     internal_static_org_opendedup_grpc_UnlinkResponse_descriptor =
       getDescriptor().getMessageTypes().get(7);
     internal_static_org_opendedup_grpc_UnlinkResponse_fieldAccessorTable = new
@@ -43792,19 +48886,19 @@ public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInsta
     internal_static_org_opendedup_grpc_DataReadRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_DataReadRequest_descriptor,
-        new java.lang.String[] { "FileHandle", "Start", "Len", });
+        new java.lang.String[] { "FileHandle", "Start", "Len", "PvolumeID", "Compress", });
     internal_static_org_opendedup_grpc_DataReadResponse_descriptor =
       getDescriptor().getMessageTypes().get(9);
     internal_static_org_opendedup_grpc_DataReadResponse_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_DataReadResponse_descriptor,
-        new java.lang.String[] { "Data", "Read", "Error", "ErrorCode", });
+        new java.lang.String[] { "Data", "Read", "Error", "ErrorCode", "Compressed", });
     internal_static_org_opendedup_grpc_FileCloseRequest_descriptor =
       getDescriptor().getMessageTypes().get(10);
     internal_static_org_opendedup_grpc_FileCloseRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_FileCloseRequest_descriptor,
-        new java.lang.String[] { "FileHandle", });
+        new java.lang.String[] { "FileHandle", "PvolumeID", });
     internal_static_org_opendedup_grpc_FileCloseResponse_descriptor =
       getDescriptor().getMessageTypes().get(11);
     internal_static_org_opendedup_grpc_FileCloseResponse_fieldAccessorTable = new
@@ -43816,7 +48910,7 @@ public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInsta
     internal_static_org_opendedup_grpc_MkNodRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_MkNodRequest_descriptor,
-        new java.lang.String[] { "Path", "Mode", "Rdev", });
+        new java.lang.String[] { "Path", "Mode", "Rdev", "PvolumeID", });
     internal_static_org_opendedup_grpc_MkNodResponse_descriptor =
       getDescriptor().getMessageTypes().get(13);
     internal_static_org_opendedup_grpc_MkNodResponse_fieldAccessorTable = new
@@ -43828,19 +48922,19 @@ public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInsta
     internal_static_org_opendedup_grpc_FileOpenRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_FileOpenRequest_descriptor,
-        new java.lang.String[] { "Path", "Flags", });
+        new java.lang.String[] { "Path", "Flags", "PvolumeID", });
     internal_static_org_opendedup_grpc_FileExistsRequest_descriptor =
       getDescriptor().getMessageTypes().get(15);
     internal_static_org_opendedup_grpc_FileExistsRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_FileExistsRequest_descriptor,
-        new java.lang.String[] { "Path", });
+        new java.lang.String[] { "Path", "PvolumeID", });
     internal_static_org_opendedup_grpc_FileExistsResponse_descriptor =
       getDescriptor().getMessageTypes().get(16);
     internal_static_org_opendedup_grpc_FileExistsResponse_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_FileExistsResponse_descriptor,
-        new java.lang.String[] { "Exists", "Error", "ErrorCode", });
+        new java.lang.String[] { "Exists", "Error", "ErrorCode", "PvolumeID", });
     internal_static_org_opendedup_grpc_FileOpenResponse_descriptor =
       getDescriptor().getMessageTypes().get(17);
     internal_static_org_opendedup_grpc_FileOpenResponse_fieldAccessorTable = new
@@ -43852,7 +48946,7 @@ public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInsta
     internal_static_org_opendedup_grpc_FileSnapshotRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_FileSnapshotRequest_descriptor,
-        new java.lang.String[] { "Src", "Dest", });
+        new java.lang.String[] { "Src", "Dest", "PvolumeID", });
     internal_static_org_opendedup_grpc_FileSnapshotResponse_descriptor =
       getDescriptor().getMessageTypes().get(19);
     internal_static_org_opendedup_grpc_FileSnapshotResponse_fieldAccessorTable = new
@@ -43864,7 +48958,7 @@ public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInsta
     internal_static_org_opendedup_grpc_FileRenameRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_FileRenameRequest_descriptor,
-        new java.lang.String[] { "Src", "Dest", });
+        new java.lang.String[] { "Src", "Dest", "PvolumeID", });
     internal_static_org_opendedup_grpc_FileRenameResponse_descriptor =
       getDescriptor().getMessageTypes().get(21);
     internal_static_org_opendedup_grpc_FileRenameResponse_fieldAccessorTable = new
@@ -43876,7 +48970,7 @@ public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInsta
     internal_static_org_opendedup_grpc_CopyExtentRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_CopyExtentRequest_descriptor,
-        new java.lang.String[] { "SrcFile", "DstFile", "SrcStart", "DstStart", "Length", });
+        new java.lang.String[] { "SrcFile", "DstFile", "SrcStart", "DstStart", "Length", "PvolumeID", });
     internal_static_org_opendedup_grpc_CopyExtentResponse_descriptor =
       getDescriptor().getMessageTypes().get(23);
     internal_static_org_opendedup_grpc_CopyExtentResponse_fieldAccessorTable = new
@@ -43888,7 +48982,7 @@ public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInsta
     internal_static_org_opendedup_grpc_SetUserMetaDataRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_SetUserMetaDataRequest_descriptor,
-        new java.lang.String[] { "FileAttributes", "Path", });
+        new java.lang.String[] { "FileAttributes", "Path", "PvolumeID", });
     internal_static_org_opendedup_grpc_SetUserMetaDataResponse_descriptor =
       getDescriptor().getMessageTypes().get(25);
     internal_static_org_opendedup_grpc_SetUserMetaDataResponse_fieldAccessorTable = new
@@ -43900,7 +48994,7 @@ public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInsta
     internal_static_org_opendedup_grpc_GetCloudFileRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_GetCloudFileRequest_descriptor,
-        new java.lang.String[] { "File", "Dstfile", "Overwrite", "Changeid", });
+        new java.lang.String[] { "File", "Dstfile", "Overwrite", "Changeid", "PvolumeID", });
     internal_static_org_opendedup_grpc_GetCloudFileResponse_descriptor =
       getDescriptor().getMessageTypes().get(27);
     internal_static_org_opendedup_grpc_GetCloudFileResponse_fieldAccessorTable = new
@@ -43912,7 +49006,7 @@ public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInsta
     internal_static_org_opendedup_grpc_ChmodRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_ChmodRequest_descriptor,
-        new java.lang.String[] { "Path", "Mode", });
+        new java.lang.String[] { "Path", "Mode", "PvolumeID", });
     internal_static_org_opendedup_grpc_ChmodResponse_descriptor =
       getDescriptor().getMessageTypes().get(29);
     internal_static_org_opendedup_grpc_ChmodResponse_fieldAccessorTable = new
@@ -43924,7 +49018,7 @@ public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInsta
     internal_static_org_opendedup_grpc_ChownRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_ChownRequest_descriptor,
-        new java.lang.String[] { "Path", "Uid", "Gid", });
+        new java.lang.String[] { "Path", "Uid", "Gid", "PvolumeID", });
     internal_static_org_opendedup_grpc_ChownResponse_descriptor =
       getDescriptor().getMessageTypes().get(31);
     internal_static_org_opendedup_grpc_ChownResponse_fieldAccessorTable = new
@@ -43936,7 +49030,7 @@ public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInsta
     internal_static_org_opendedup_grpc_FlushRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_FlushRequest_descriptor,
-        new java.lang.String[] { "Path", "Fd", });
+        new java.lang.String[] { "Path", "Fd", "PvolumeID", });
     internal_static_org_opendedup_grpc_FlushResponse_descriptor =
       getDescriptor().getMessageTypes().get(33);
     internal_static_org_opendedup_grpc_FlushResponse_fieldAccessorTable = new
@@ -43954,7 +49048,7 @@ public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInsta
     internal_static_org_opendedup_grpc_StatRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_StatRequest_descriptor,
-        new java.lang.String[] { "Path", });
+        new java.lang.String[] { "Path", "PvolumeID", });
     internal_static_org_opendedup_grpc_StatResponse_descriptor =
       getDescriptor().getMessageTypes().get(36);
     internal_static_org_opendedup_grpc_StatResponse_fieldAccessorTable = new
@@ -43966,7 +49060,7 @@ public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInsta
     internal_static_org_opendedup_grpc_LinkRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_LinkRequest_descriptor,
-        new java.lang.String[] { "Path", });
+        new java.lang.String[] { "Path", "PvolumeID", });
     internal_static_org_opendedup_grpc_LinkResponse_descriptor =
       getDescriptor().getMessageTypes().get(38);
     internal_static_org_opendedup_grpc_LinkResponse_fieldAccessorTable = new
@@ -43984,7 +49078,7 @@ public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInsta
     internal_static_org_opendedup_grpc_StatFSRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_StatFSRequest_descriptor,
-        new java.lang.String[] { });
+        new java.lang.String[] { "PvolumeID", });
     internal_static_org_opendedup_grpc_StatFSResponse_descriptor =
       getDescriptor().getMessageTypes().get(41);
     internal_static_org_opendedup_grpc_StatFSResponse_fieldAccessorTable = new
@@ -43996,7 +49090,7 @@ public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInsta
     internal_static_org_opendedup_grpc_SymLinkRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_SymLinkRequest_descriptor,
-        new java.lang.String[] { "From", "To", });
+        new java.lang.String[] { "From", "To", "PvolumeID", });
     internal_static_org_opendedup_grpc_SymLinkResponse_descriptor =
       getDescriptor().getMessageTypes().get(43);
     internal_static_org_opendedup_grpc_SymLinkResponse_fieldAccessorTable = new
@@ -44008,7 +49102,7 @@ public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInsta
     internal_static_org_opendedup_grpc_TruncateRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_TruncateRequest_descriptor,
-        new java.lang.String[] { "Path", "Length", });
+        new java.lang.String[] { "Path", "Length", "PvolumeID", });
     internal_static_org_opendedup_grpc_TruncateResponse_descriptor =
       getDescriptor().getMessageTypes().get(45);
     internal_static_org_opendedup_grpc_TruncateResponse_fieldAccessorTable = new
@@ -44020,7 +49114,7 @@ public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInsta
     internal_static_org_opendedup_grpc_UtimeRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_UtimeRequest_descriptor,
-        new java.lang.String[] { "Path", "Atime", "Mtime", });
+        new java.lang.String[] { "Path", "Atime", "Mtime", "PvolumeID", });
     internal_static_org_opendedup_grpc_UtimeResponse_descriptor =
       getDescriptor().getMessageTypes().get(47);
     internal_static_org_opendedup_grpc_UtimeResponse_fieldAccessorTable = new
@@ -44032,7 +49126,7 @@ public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInsta
     internal_static_org_opendedup_grpc_GetXAttrRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_GetXAttrRequest_descriptor,
-        new java.lang.String[] { "Attr", "Path", });
+        new java.lang.String[] { "Attr", "Path", "PvolumeID", });
     internal_static_org_opendedup_grpc_GetXAttrResponse_descriptor =
       getDescriptor().getMessageTypes().get(49);
     internal_static_org_opendedup_grpc_GetXAttrResponse_fieldAccessorTable = new
@@ -44044,7 +49138,7 @@ public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInsta
     internal_static_org_opendedup_grpc_SetXAttrRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_SetXAttrRequest_descriptor,
-        new java.lang.String[] { "Attr", "Value", "Path", });
+        new java.lang.String[] { "Attr", "Value", "Path", "PvolumeID", });
     internal_static_org_opendedup_grpc_SetXAttrResponse_descriptor =
       getDescriptor().getMessageTypes().get(51);
     internal_static_org_opendedup_grpc_SetXAttrResponse_fieldAccessorTable = new
@@ -44056,7 +49150,7 @@ public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInsta
     internal_static_org_opendedup_grpc_RemoveXAttrRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_RemoveXAttrRequest_descriptor,
-        new java.lang.String[] { "Attr", "Path", });
+        new java.lang.String[] { "Attr", "Path", "PvolumeID", });
     internal_static_org_opendedup_grpc_RemoveXAttrResponse_descriptor =
       getDescriptor().getMessageTypes().get(53);
     internal_static_org_opendedup_grpc_RemoveXAttrResponse_fieldAccessorTable = new
@@ -44068,7 +49162,7 @@ public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInsta
     internal_static_org_opendedup_grpc_GetXAttrSizeRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_GetXAttrSizeRequest_descriptor,
-        new java.lang.String[] { "Attr", "Path", });
+        new java.lang.String[] { "Attr", "Path", "PvolumeID", });
     internal_static_org_opendedup_grpc_GetXAttrSizeResponse_descriptor =
       getDescriptor().getMessageTypes().get(55);
     internal_static_org_opendedup_grpc_GetXAttrSizeResponse_fieldAccessorTable = new
@@ -44080,7 +49174,7 @@ public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInsta
     internal_static_org_opendedup_grpc_FsyncRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_FsyncRequest_descriptor,
-        new java.lang.String[] { "Path", "Fh", "Datasync", });
+        new java.lang.String[] { "Path", "Fh", "Datasync", "PvolumeID", });
     internal_static_org_opendedup_grpc_FsyncResponse_descriptor =
       getDescriptor().getMessageTypes().get(57);
     internal_static_org_opendedup_grpc_FsyncResponse_fieldAccessorTable = new
@@ -44092,7 +49186,31 @@ public org.opendedup.grpc.IOService.SyncNotificationSubscription getDefaultInsta
     internal_static_org_opendedup_grpc_SyncNotificationSubscription_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_SyncNotificationSubscription_descriptor,
-        new java.lang.String[] { "Uid", });
+        new java.lang.String[] { "Uid", "PvolumeID", });
+    internal_static_org_opendedup_grpc_SetRetrievalTierRequest_descriptor =
+      getDescriptor().getMessageTypes().get(59);
+    internal_static_org_opendedup_grpc_SetRetrievalTierRequest_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_org_opendedup_grpc_SetRetrievalTierRequest_descriptor,
+        new java.lang.String[] { "TierType", "PvolumeID", });
+    internal_static_org_opendedup_grpc_SetRetrievalTierResponse_descriptor =
+      getDescriptor().getMessageTypes().get(60);
+    internal_static_org_opendedup_grpc_SetRetrievalTierResponse_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_org_opendedup_grpc_SetRetrievalTierResponse_descriptor,
+        new java.lang.String[] { "Error", "ErrorCode", });
+    internal_static_org_opendedup_grpc_GetRetrievalTierRequest_descriptor =
+      getDescriptor().getMessageTypes().get(61);
+    internal_static_org_opendedup_grpc_GetRetrievalTierRequest_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_org_opendedup_grpc_GetRetrievalTierRequest_descriptor,
+        new java.lang.String[] { "PvolumeID", });
+    internal_static_org_opendedup_grpc_GetRetrievalTierResponse_descriptor =
+      getDescriptor().getMessageTypes().get(62);
+    internal_static_org_opendedup_grpc_GetRetrievalTierResponse_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_org_opendedup_grpc_GetRetrievalTierResponse_descriptor,
+        new java.lang.String[] { "TierType", "Error", "ErrorCode", });
     org.opendedup.grpc.FileInfo.getDescriptor();
   }
 
diff --git a/src/org/opendedup/grpc/PortRedirector.java b/src/org/opendedup/grpc/PortRedirector.java
new file mode 100644
index 000000000..4618c03b0
--- /dev/null
+++ b/src/org/opendedup/grpc/PortRedirector.java
@@ -0,0 +1,2668 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: PortRedirector.proto
+
+package org.opendedup.grpc;
+
+public final class PortRedirector {
+  private PortRedirector() {}
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistryLite registry) {
+  }
+
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistry registry) {
+    registerAllExtensions(
+        (com.google.protobuf.ExtensionRegistryLite) registry);
+  }
+  public interface ProxyVolumeInfoRequestOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:org.opendedup.grpc.ProxyVolumeInfoRequest)
+      com.google.protobuf.MessageOrBuilder {
+  }
+  /**
+   * 
+   * Request payload
+   * 
+ * + * Protobuf type {@code org.opendedup.grpc.ProxyVolumeInfoRequest} + */ + public static final class ProxyVolumeInfoRequest extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:org.opendedup.grpc.ProxyVolumeInfoRequest) + ProxyVolumeInfoRequestOrBuilder { + private static final long serialVersionUID = 0L; + // Use ProxyVolumeInfoRequest.newBuilder() to construct. + private ProxyVolumeInfoRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ProxyVolumeInfoRequest() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new ProxyVolumeInfoRequest(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private ProxyVolumeInfoRequest( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.opendedup.grpc.PortRedirector.internal_static_org_opendedup_grpc_ProxyVolumeInfoRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.opendedup.grpc.PortRedirector.internal_static_org_opendedup_grpc_ProxyVolumeInfoRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest.class, org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest.Builder.class); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest)) { + return super.equals(obj); + } + org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest other = (org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest) obj; + + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+     * Request payload
+     * 
+ * + * Protobuf type {@code org.opendedup.grpc.ProxyVolumeInfoRequest} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:org.opendedup.grpc.ProxyVolumeInfoRequest) + org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.opendedup.grpc.PortRedirector.internal_static_org_opendedup_grpc_ProxyVolumeInfoRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.opendedup.grpc.PortRedirector.internal_static_org_opendedup_grpc_ProxyVolumeInfoRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest.class, org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest.Builder.class); + } + + // Construct using org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.opendedup.grpc.PortRedirector.internal_static_org_opendedup_grpc_ProxyVolumeInfoRequest_descriptor; + } + + @java.lang.Override + public org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest getDefaultInstanceForType() { + return org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest.getDefaultInstance(); + } + + @java.lang.Override + public org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest build() { + org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest buildPartial() { + org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest result = new org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest(this); + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest) { + return mergeFrom((org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest other) { + if (other == org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest.getDefaultInstance()) return this; + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:org.opendedup.grpc.ProxyVolumeInfoRequest) + } + + // @@protoc_insertion_point(class_scope:org.opendedup.grpc.ProxyVolumeInfoRequest) + private static final org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest(); + } + + public static org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ProxyVolumeInfoRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new ProxyVolumeInfoRequest(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface ProxyVolumeInfoResponseOrBuilder extends + // @@protoc_insertion_point(interface_extends:org.opendedup.grpc.ProxyVolumeInfoResponse) + com.google.protobuf.MessageOrBuilder { + + /** + * repeated .org.opendedup.grpc.VolumeInfoResponse volumeInfoResponse = 1; + */ + java.util.List + getVolumeInfoResponseList(); + /** + * repeated .org.opendedup.grpc.VolumeInfoResponse volumeInfoResponse = 1; + */ + org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoResponse getVolumeInfoResponse(int index); + /** + * repeated .org.opendedup.grpc.VolumeInfoResponse volumeInfoResponse = 1; + */ + int getVolumeInfoResponseCount(); + /** + * repeated .org.opendedup.grpc.VolumeInfoResponse volumeInfoResponse = 1; + */ + java.util.List + getVolumeInfoResponseOrBuilderList(); + /** + * repeated .org.opendedup.grpc.VolumeInfoResponse volumeInfoResponse = 1; + */ + org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoResponseOrBuilder getVolumeInfoResponseOrBuilder( + int index); + + /** + * string error = 2; + * @return The error. + */ + java.lang.String getError(); + /** + * string error = 2; + * @return The bytes for error. + */ + com.google.protobuf.ByteString + getErrorBytes(); + + /** + * .org.opendedup.grpc.errorCodes errorCode = 3; + * @return The enum numeric value on the wire for errorCode. + */ + int getErrorCodeValue(); + /** + * .org.opendedup.grpc.errorCodes errorCode = 3; + * @return The errorCode. + */ + org.opendedup.grpc.FileInfo.errorCodes getErrorCode(); + } + /** + * Protobuf type {@code org.opendedup.grpc.ProxyVolumeInfoResponse} + */ + public static final class ProxyVolumeInfoResponse extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:org.opendedup.grpc.ProxyVolumeInfoResponse) + ProxyVolumeInfoResponseOrBuilder { + private static final long serialVersionUID = 0L; + // Use ProxyVolumeInfoResponse.newBuilder() to construct. + private ProxyVolumeInfoResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ProxyVolumeInfoResponse() { + volumeInfoResponse_ = java.util.Collections.emptyList(); + error_ = ""; + errorCode_ = 0; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new ProxyVolumeInfoResponse(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private ProxyVolumeInfoResponse( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + if (!((mutable_bitField0_ & 0x00000001) != 0)) { + volumeInfoResponse_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000001; + } + volumeInfoResponse_.add( + input.readMessage(org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoResponse.parser(), extensionRegistry)); + break; + } + case 18: { + java.lang.String s = input.readStringRequireUtf8(); + + error_ = s; + break; + } + case 24: { + int rawValue = input.readEnum(); + + errorCode_ = rawValue; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + if (((mutable_bitField0_ & 0x00000001) != 0)) { + volumeInfoResponse_ = java.util.Collections.unmodifiableList(volumeInfoResponse_); + } + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.opendedup.grpc.PortRedirector.internal_static_org_opendedup_grpc_ProxyVolumeInfoResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.opendedup.grpc.PortRedirector.internal_static_org_opendedup_grpc_ProxyVolumeInfoResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse.class, org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse.Builder.class); + } + + public static final int VOLUMEINFORESPONSE_FIELD_NUMBER = 1; + private java.util.List volumeInfoResponse_; + /** + * repeated .org.opendedup.grpc.VolumeInfoResponse volumeInfoResponse = 1; + */ + @java.lang.Override + public java.util.List getVolumeInfoResponseList() { + return volumeInfoResponse_; + } + /** + * repeated .org.opendedup.grpc.VolumeInfoResponse volumeInfoResponse = 1; + */ + @java.lang.Override + public java.util.List + getVolumeInfoResponseOrBuilderList() { + return volumeInfoResponse_; + } + /** + * repeated .org.opendedup.grpc.VolumeInfoResponse volumeInfoResponse = 1; + */ + @java.lang.Override + public int getVolumeInfoResponseCount() { + return volumeInfoResponse_.size(); + } + /** + * repeated .org.opendedup.grpc.VolumeInfoResponse volumeInfoResponse = 1; + */ + @java.lang.Override + public org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoResponse getVolumeInfoResponse(int index) { + return volumeInfoResponse_.get(index); + } + /** + * repeated .org.opendedup.grpc.VolumeInfoResponse volumeInfoResponse = 1; + */ + @java.lang.Override + public org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoResponseOrBuilder getVolumeInfoResponseOrBuilder( + int index) { + return volumeInfoResponse_.get(index); + } + + public static final int ERROR_FIELD_NUMBER = 2; + private volatile java.lang.Object error_; + /** + * string error = 2; + * @return The error. + */ + @java.lang.Override + public java.lang.String getError() { + java.lang.Object ref = error_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + error_ = s; + return s; + } + } + /** + * string error = 2; + * @return The bytes for error. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getErrorBytes() { + java.lang.Object ref = error_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + error_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int ERRORCODE_FIELD_NUMBER = 3; + private int errorCode_; + /** + * .org.opendedup.grpc.errorCodes errorCode = 3; + * @return The enum numeric value on the wire for errorCode. + */ + @java.lang.Override public int getErrorCodeValue() { + return errorCode_; + } + /** + * .org.opendedup.grpc.errorCodes errorCode = 3; + * @return The errorCode. + */ + @java.lang.Override public org.opendedup.grpc.FileInfo.errorCodes getErrorCode() { + @SuppressWarnings("deprecation") + org.opendedup.grpc.FileInfo.errorCodes result = org.opendedup.grpc.FileInfo.errorCodes.valueOf(errorCode_); + return result == null ? org.opendedup.grpc.FileInfo.errorCodes.UNRECOGNIZED : result; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + for (int i = 0; i < volumeInfoResponse_.size(); i++) { + output.writeMessage(1, volumeInfoResponse_.get(i)); + } + if (!getErrorBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, error_); + } + if (errorCode_ != org.opendedup.grpc.FileInfo.errorCodes.NOERR.getNumber()) { + output.writeEnum(3, errorCode_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + for (int i = 0; i < volumeInfoResponse_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, volumeInfoResponse_.get(i)); + } + if (!getErrorBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, error_); + } + if (errorCode_ != org.opendedup.grpc.FileInfo.errorCodes.NOERR.getNumber()) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(3, errorCode_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse)) { + return super.equals(obj); + } + org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse other = (org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse) obj; + + if (!getVolumeInfoResponseList() + .equals(other.getVolumeInfoResponseList())) return false; + if (!getError() + .equals(other.getError())) return false; + if (errorCode_ != other.errorCode_) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getVolumeInfoResponseCount() > 0) { + hash = (37 * hash) + VOLUMEINFORESPONSE_FIELD_NUMBER; + hash = (53 * hash) + getVolumeInfoResponseList().hashCode(); + } + hash = (37 * hash) + ERROR_FIELD_NUMBER; + hash = (53 * hash) + getError().hashCode(); + hash = (37 * hash) + ERRORCODE_FIELD_NUMBER; + hash = (53 * hash) + errorCode_; + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code org.opendedup.grpc.ProxyVolumeInfoResponse} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:org.opendedup.grpc.ProxyVolumeInfoResponse) + org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.opendedup.grpc.PortRedirector.internal_static_org_opendedup_grpc_ProxyVolumeInfoResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.opendedup.grpc.PortRedirector.internal_static_org_opendedup_grpc_ProxyVolumeInfoResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse.class, org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse.Builder.class); + } + + // Construct using org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + getVolumeInfoResponseFieldBuilder(); + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + if (volumeInfoResponseBuilder_ == null) { + volumeInfoResponse_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + } else { + volumeInfoResponseBuilder_.clear(); + } + error_ = ""; + + errorCode_ = 0; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.opendedup.grpc.PortRedirector.internal_static_org_opendedup_grpc_ProxyVolumeInfoResponse_descriptor; + } + + @java.lang.Override + public org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse getDefaultInstanceForType() { + return org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse.getDefaultInstance(); + } + + @java.lang.Override + public org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse build() { + org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse buildPartial() { + org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse result = new org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse(this); + int from_bitField0_ = bitField0_; + if (volumeInfoResponseBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + volumeInfoResponse_ = java.util.Collections.unmodifiableList(volumeInfoResponse_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.volumeInfoResponse_ = volumeInfoResponse_; + } else { + result.volumeInfoResponse_ = volumeInfoResponseBuilder_.build(); + } + result.error_ = error_; + result.errorCode_ = errorCode_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse) { + return mergeFrom((org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse other) { + if (other == org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse.getDefaultInstance()) return this; + if (volumeInfoResponseBuilder_ == null) { + if (!other.volumeInfoResponse_.isEmpty()) { + if (volumeInfoResponse_.isEmpty()) { + volumeInfoResponse_ = other.volumeInfoResponse_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureVolumeInfoResponseIsMutable(); + volumeInfoResponse_.addAll(other.volumeInfoResponse_); + } + onChanged(); + } + } else { + if (!other.volumeInfoResponse_.isEmpty()) { + if (volumeInfoResponseBuilder_.isEmpty()) { + volumeInfoResponseBuilder_.dispose(); + volumeInfoResponseBuilder_ = null; + volumeInfoResponse_ = other.volumeInfoResponse_; + bitField0_ = (bitField0_ & ~0x00000001); + volumeInfoResponseBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getVolumeInfoResponseFieldBuilder() : null; + } else { + volumeInfoResponseBuilder_.addAllMessages(other.volumeInfoResponse_); + } + } + } + if (!other.getError().isEmpty()) { + error_ = other.error_; + onChanged(); + } + if (other.errorCode_ != 0) { + setErrorCodeValue(other.getErrorCodeValue()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private java.util.List volumeInfoResponse_ = + java.util.Collections.emptyList(); + private void ensureVolumeInfoResponseIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + volumeInfoResponse_ = new java.util.ArrayList(volumeInfoResponse_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoResponse, org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoResponse.Builder, org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoResponseOrBuilder> volumeInfoResponseBuilder_; + + /** + * repeated .org.opendedup.grpc.VolumeInfoResponse volumeInfoResponse = 1; + */ + public java.util.List getVolumeInfoResponseList() { + if (volumeInfoResponseBuilder_ == null) { + return java.util.Collections.unmodifiableList(volumeInfoResponse_); + } else { + return volumeInfoResponseBuilder_.getMessageList(); + } + } + /** + * repeated .org.opendedup.grpc.VolumeInfoResponse volumeInfoResponse = 1; + */ + public int getVolumeInfoResponseCount() { + if (volumeInfoResponseBuilder_ == null) { + return volumeInfoResponse_.size(); + } else { + return volumeInfoResponseBuilder_.getCount(); + } + } + /** + * repeated .org.opendedup.grpc.VolumeInfoResponse volumeInfoResponse = 1; + */ + public org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoResponse getVolumeInfoResponse(int index) { + if (volumeInfoResponseBuilder_ == null) { + return volumeInfoResponse_.get(index); + } else { + return volumeInfoResponseBuilder_.getMessage(index); + } + } + /** + * repeated .org.opendedup.grpc.VolumeInfoResponse volumeInfoResponse = 1; + */ + public Builder setVolumeInfoResponse( + int index, org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoResponse value) { + if (volumeInfoResponseBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureVolumeInfoResponseIsMutable(); + volumeInfoResponse_.set(index, value); + onChanged(); + } else { + volumeInfoResponseBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .org.opendedup.grpc.VolumeInfoResponse volumeInfoResponse = 1; + */ + public Builder setVolumeInfoResponse( + int index, org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoResponse.Builder builderForValue) { + if (volumeInfoResponseBuilder_ == null) { + ensureVolumeInfoResponseIsMutable(); + volumeInfoResponse_.set(index, builderForValue.build()); + onChanged(); + } else { + volumeInfoResponseBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .org.opendedup.grpc.VolumeInfoResponse volumeInfoResponse = 1; + */ + public Builder addVolumeInfoResponse(org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoResponse value) { + if (volumeInfoResponseBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureVolumeInfoResponseIsMutable(); + volumeInfoResponse_.add(value); + onChanged(); + } else { + volumeInfoResponseBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .org.opendedup.grpc.VolumeInfoResponse volumeInfoResponse = 1; + */ + public Builder addVolumeInfoResponse( + int index, org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoResponse value) { + if (volumeInfoResponseBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureVolumeInfoResponseIsMutable(); + volumeInfoResponse_.add(index, value); + onChanged(); + } else { + volumeInfoResponseBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .org.opendedup.grpc.VolumeInfoResponse volumeInfoResponse = 1; + */ + public Builder addVolumeInfoResponse( + org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoResponse.Builder builderForValue) { + if (volumeInfoResponseBuilder_ == null) { + ensureVolumeInfoResponseIsMutable(); + volumeInfoResponse_.add(builderForValue.build()); + onChanged(); + } else { + volumeInfoResponseBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .org.opendedup.grpc.VolumeInfoResponse volumeInfoResponse = 1; + */ + public Builder addVolumeInfoResponse( + int index, org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoResponse.Builder builderForValue) { + if (volumeInfoResponseBuilder_ == null) { + ensureVolumeInfoResponseIsMutable(); + volumeInfoResponse_.add(index, builderForValue.build()); + onChanged(); + } else { + volumeInfoResponseBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .org.opendedup.grpc.VolumeInfoResponse volumeInfoResponse = 1; + */ + public Builder addAllVolumeInfoResponse( + java.lang.Iterable values) { + if (volumeInfoResponseBuilder_ == null) { + ensureVolumeInfoResponseIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, volumeInfoResponse_); + onChanged(); + } else { + volumeInfoResponseBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .org.opendedup.grpc.VolumeInfoResponse volumeInfoResponse = 1; + */ + public Builder clearVolumeInfoResponse() { + if (volumeInfoResponseBuilder_ == null) { + volumeInfoResponse_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + volumeInfoResponseBuilder_.clear(); + } + return this; + } + /** + * repeated .org.opendedup.grpc.VolumeInfoResponse volumeInfoResponse = 1; + */ + public Builder removeVolumeInfoResponse(int index) { + if (volumeInfoResponseBuilder_ == null) { + ensureVolumeInfoResponseIsMutable(); + volumeInfoResponse_.remove(index); + onChanged(); + } else { + volumeInfoResponseBuilder_.remove(index); + } + return this; + } + /** + * repeated .org.opendedup.grpc.VolumeInfoResponse volumeInfoResponse = 1; + */ + public org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoResponse.Builder getVolumeInfoResponseBuilder( + int index) { + return getVolumeInfoResponseFieldBuilder().getBuilder(index); + } + /** + * repeated .org.opendedup.grpc.VolumeInfoResponse volumeInfoResponse = 1; + */ + public org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoResponseOrBuilder getVolumeInfoResponseOrBuilder( + int index) { + if (volumeInfoResponseBuilder_ == null) { + return volumeInfoResponse_.get(index); } else { + return volumeInfoResponseBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .org.opendedup.grpc.VolumeInfoResponse volumeInfoResponse = 1; + */ + public java.util.List + getVolumeInfoResponseOrBuilderList() { + if (volumeInfoResponseBuilder_ != null) { + return volumeInfoResponseBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(volumeInfoResponse_); + } + } + /** + * repeated .org.opendedup.grpc.VolumeInfoResponse volumeInfoResponse = 1; + */ + public org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoResponse.Builder addVolumeInfoResponseBuilder() { + return getVolumeInfoResponseFieldBuilder().addBuilder( + org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoResponse.getDefaultInstance()); + } + /** + * repeated .org.opendedup.grpc.VolumeInfoResponse volumeInfoResponse = 1; + */ + public org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoResponse.Builder addVolumeInfoResponseBuilder( + int index) { + return getVolumeInfoResponseFieldBuilder().addBuilder( + index, org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoResponse.getDefaultInstance()); + } + /** + * repeated .org.opendedup.grpc.VolumeInfoResponse volumeInfoResponse = 1; + */ + public java.util.List + getVolumeInfoResponseBuilderList() { + return getVolumeInfoResponseFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoResponse, org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoResponse.Builder, org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoResponseOrBuilder> + getVolumeInfoResponseFieldBuilder() { + if (volumeInfoResponseBuilder_ == null) { + volumeInfoResponseBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoResponse, org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoResponse.Builder, org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoResponseOrBuilder>( + volumeInfoResponse_, + ((bitField0_ & 0x00000001) != 0), + getParentForChildren(), + isClean()); + volumeInfoResponse_ = null; + } + return volumeInfoResponseBuilder_; + } + + private java.lang.Object error_ = ""; + /** + * string error = 2; + * @return The error. + */ + public java.lang.String getError() { + java.lang.Object ref = error_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + error_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string error = 2; + * @return The bytes for error. + */ + public com.google.protobuf.ByteString + getErrorBytes() { + java.lang.Object ref = error_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + error_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string error = 2; + * @param value The error to set. + * @return This builder for chaining. + */ + public Builder setError( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + error_ = value; + onChanged(); + return this; + } + /** + * string error = 2; + * @return This builder for chaining. + */ + public Builder clearError() { + + error_ = getDefaultInstance().getError(); + onChanged(); + return this; + } + /** + * string error = 2; + * @param value The bytes for error to set. + * @return This builder for chaining. + */ + public Builder setErrorBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + error_ = value; + onChanged(); + return this; + } + + private int errorCode_ = 0; + /** + * .org.opendedup.grpc.errorCodes errorCode = 3; + * @return The enum numeric value on the wire for errorCode. + */ + @java.lang.Override public int getErrorCodeValue() { + return errorCode_; + } + /** + * .org.opendedup.grpc.errorCodes errorCode = 3; + * @param value The enum numeric value on the wire for errorCode to set. + * @return This builder for chaining. + */ + public Builder setErrorCodeValue(int value) { + + errorCode_ = value; + onChanged(); + return this; + } + /** + * .org.opendedup.grpc.errorCodes errorCode = 3; + * @return The errorCode. + */ + @java.lang.Override + public org.opendedup.grpc.FileInfo.errorCodes getErrorCode() { + @SuppressWarnings("deprecation") + org.opendedup.grpc.FileInfo.errorCodes result = org.opendedup.grpc.FileInfo.errorCodes.valueOf(errorCode_); + return result == null ? org.opendedup.grpc.FileInfo.errorCodes.UNRECOGNIZED : result; + } + /** + * .org.opendedup.grpc.errorCodes errorCode = 3; + * @param value The errorCode to set. + * @return This builder for chaining. + */ + public Builder setErrorCode(org.opendedup.grpc.FileInfo.errorCodes value) { + if (value == null) { + throw new NullPointerException(); + } + + errorCode_ = value.getNumber(); + onChanged(); + return this; + } + /** + * .org.opendedup.grpc.errorCodes errorCode = 3; + * @return This builder for chaining. + */ + public Builder clearErrorCode() { + + errorCode_ = 0; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:org.opendedup.grpc.ProxyVolumeInfoResponse) + } + + // @@protoc_insertion_point(class_scope:org.opendedup.grpc.ProxyVolumeInfoResponse) + private static final org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse(); + } + + public static org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ProxyVolumeInfoResponse parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new ProxyVolumeInfoResponse(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface ReloadConfigRequestOrBuilder extends + // @@protoc_insertion_point(interface_extends:org.opendedup.grpc.ReloadConfigRequest) + com.google.protobuf.MessageOrBuilder { + } + /** + * Protobuf type {@code org.opendedup.grpc.ReloadConfigRequest} + */ + public static final class ReloadConfigRequest extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:org.opendedup.grpc.ReloadConfigRequest) + ReloadConfigRequestOrBuilder { + private static final long serialVersionUID = 0L; + // Use ReloadConfigRequest.newBuilder() to construct. + private ReloadConfigRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ReloadConfigRequest() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new ReloadConfigRequest(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private ReloadConfigRequest( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.opendedup.grpc.PortRedirector.internal_static_org_opendedup_grpc_ReloadConfigRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.opendedup.grpc.PortRedirector.internal_static_org_opendedup_grpc_ReloadConfigRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.opendedup.grpc.PortRedirector.ReloadConfigRequest.class, org.opendedup.grpc.PortRedirector.ReloadConfigRequest.Builder.class); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof org.opendedup.grpc.PortRedirector.ReloadConfigRequest)) { + return super.equals(obj); + } + org.opendedup.grpc.PortRedirector.ReloadConfigRequest other = (org.opendedup.grpc.PortRedirector.ReloadConfigRequest) obj; + + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static org.opendedup.grpc.PortRedirector.ReloadConfigRequest parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendedup.grpc.PortRedirector.ReloadConfigRequest parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendedup.grpc.PortRedirector.ReloadConfigRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendedup.grpc.PortRedirector.ReloadConfigRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendedup.grpc.PortRedirector.ReloadConfigRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendedup.grpc.PortRedirector.ReloadConfigRequest parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendedup.grpc.PortRedirector.ReloadConfigRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.opendedup.grpc.PortRedirector.ReloadConfigRequest parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static org.opendedup.grpc.PortRedirector.ReloadConfigRequest parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static org.opendedup.grpc.PortRedirector.ReloadConfigRequest parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static org.opendedup.grpc.PortRedirector.ReloadConfigRequest parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.opendedup.grpc.PortRedirector.ReloadConfigRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(org.opendedup.grpc.PortRedirector.ReloadConfigRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code org.opendedup.grpc.ReloadConfigRequest} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:org.opendedup.grpc.ReloadConfigRequest) + org.opendedup.grpc.PortRedirector.ReloadConfigRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.opendedup.grpc.PortRedirector.internal_static_org_opendedup_grpc_ReloadConfigRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.opendedup.grpc.PortRedirector.internal_static_org_opendedup_grpc_ReloadConfigRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.opendedup.grpc.PortRedirector.ReloadConfigRequest.class, org.opendedup.grpc.PortRedirector.ReloadConfigRequest.Builder.class); + } + + // Construct using org.opendedup.grpc.PortRedirector.ReloadConfigRequest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.opendedup.grpc.PortRedirector.internal_static_org_opendedup_grpc_ReloadConfigRequest_descriptor; + } + + @java.lang.Override + public org.opendedup.grpc.PortRedirector.ReloadConfigRequest getDefaultInstanceForType() { + return org.opendedup.grpc.PortRedirector.ReloadConfigRequest.getDefaultInstance(); + } + + @java.lang.Override + public org.opendedup.grpc.PortRedirector.ReloadConfigRequest build() { + org.opendedup.grpc.PortRedirector.ReloadConfigRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public org.opendedup.grpc.PortRedirector.ReloadConfigRequest buildPartial() { + org.opendedup.grpc.PortRedirector.ReloadConfigRequest result = new org.opendedup.grpc.PortRedirector.ReloadConfigRequest(this); + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.opendedup.grpc.PortRedirector.ReloadConfigRequest) { + return mergeFrom((org.opendedup.grpc.PortRedirector.ReloadConfigRequest)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.opendedup.grpc.PortRedirector.ReloadConfigRequest other) { + if (other == org.opendedup.grpc.PortRedirector.ReloadConfigRequest.getDefaultInstance()) return this; + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.opendedup.grpc.PortRedirector.ReloadConfigRequest parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.opendedup.grpc.PortRedirector.ReloadConfigRequest) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:org.opendedup.grpc.ReloadConfigRequest) + } + + // @@protoc_insertion_point(class_scope:org.opendedup.grpc.ReloadConfigRequest) + private static final org.opendedup.grpc.PortRedirector.ReloadConfigRequest DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new org.opendedup.grpc.PortRedirector.ReloadConfigRequest(); + } + + public static org.opendedup.grpc.PortRedirector.ReloadConfigRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ReloadConfigRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new ReloadConfigRequest(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public org.opendedup.grpc.PortRedirector.ReloadConfigRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface ReloadConfigResponseOrBuilder extends + // @@protoc_insertion_point(interface_extends:org.opendedup.grpc.ReloadConfigResponse) + com.google.protobuf.MessageOrBuilder { + + /** + * string error = 1; + * @return The error. + */ + java.lang.String getError(); + /** + * string error = 1; + * @return The bytes for error. + */ + com.google.protobuf.ByteString + getErrorBytes(); + + /** + * .org.opendedup.grpc.errorCodes errorCode = 2; + * @return The enum numeric value on the wire for errorCode. + */ + int getErrorCodeValue(); + /** + * .org.opendedup.grpc.errorCodes errorCode = 2; + * @return The errorCode. + */ + org.opendedup.grpc.FileInfo.errorCodes getErrorCode(); + } + /** + * Protobuf type {@code org.opendedup.grpc.ReloadConfigResponse} + */ + public static final class ReloadConfigResponse extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:org.opendedup.grpc.ReloadConfigResponse) + ReloadConfigResponseOrBuilder { + private static final long serialVersionUID = 0L; + // Use ReloadConfigResponse.newBuilder() to construct. + private ReloadConfigResponse(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ReloadConfigResponse() { + error_ = ""; + errorCode_ = 0; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new ReloadConfigResponse(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private ReloadConfigResponse( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + java.lang.String s = input.readStringRequireUtf8(); + + error_ = s; + break; + } + case 16: { + int rawValue = input.readEnum(); + + errorCode_ = rawValue; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.opendedup.grpc.PortRedirector.internal_static_org_opendedup_grpc_ReloadConfigResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.opendedup.grpc.PortRedirector.internal_static_org_opendedup_grpc_ReloadConfigResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.opendedup.grpc.PortRedirector.ReloadConfigResponse.class, org.opendedup.grpc.PortRedirector.ReloadConfigResponse.Builder.class); + } + + public static final int ERROR_FIELD_NUMBER = 1; + private volatile java.lang.Object error_; + /** + * string error = 1; + * @return The error. + */ + @java.lang.Override + public java.lang.String getError() { + java.lang.Object ref = error_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + error_ = s; + return s; + } + } + /** + * string error = 1; + * @return The bytes for error. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getErrorBytes() { + java.lang.Object ref = error_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + error_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int ERRORCODE_FIELD_NUMBER = 2; + private int errorCode_; + /** + * .org.opendedup.grpc.errorCodes errorCode = 2; + * @return The enum numeric value on the wire for errorCode. + */ + @java.lang.Override public int getErrorCodeValue() { + return errorCode_; + } + /** + * .org.opendedup.grpc.errorCodes errorCode = 2; + * @return The errorCode. + */ + @java.lang.Override public org.opendedup.grpc.FileInfo.errorCodes getErrorCode() { + @SuppressWarnings("deprecation") + org.opendedup.grpc.FileInfo.errorCodes result = org.opendedup.grpc.FileInfo.errorCodes.valueOf(errorCode_); + return result == null ? org.opendedup.grpc.FileInfo.errorCodes.UNRECOGNIZED : result; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!getErrorBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, error_); + } + if (errorCode_ != org.opendedup.grpc.FileInfo.errorCodes.NOERR.getNumber()) { + output.writeEnum(2, errorCode_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!getErrorBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, error_); + } + if (errorCode_ != org.opendedup.grpc.FileInfo.errorCodes.NOERR.getNumber()) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(2, errorCode_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof org.opendedup.grpc.PortRedirector.ReloadConfigResponse)) { + return super.equals(obj); + } + org.opendedup.grpc.PortRedirector.ReloadConfigResponse other = (org.opendedup.grpc.PortRedirector.ReloadConfigResponse) obj; + + if (!getError() + .equals(other.getError())) return false; + if (errorCode_ != other.errorCode_) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + ERROR_FIELD_NUMBER; + hash = (53 * hash) + getError().hashCode(); + hash = (37 * hash) + ERRORCODE_FIELD_NUMBER; + hash = (53 * hash) + errorCode_; + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static org.opendedup.grpc.PortRedirector.ReloadConfigResponse parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendedup.grpc.PortRedirector.ReloadConfigResponse parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendedup.grpc.PortRedirector.ReloadConfigResponse parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendedup.grpc.PortRedirector.ReloadConfigResponse parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendedup.grpc.PortRedirector.ReloadConfigResponse parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.opendedup.grpc.PortRedirector.ReloadConfigResponse parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.opendedup.grpc.PortRedirector.ReloadConfigResponse parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.opendedup.grpc.PortRedirector.ReloadConfigResponse parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static org.opendedup.grpc.PortRedirector.ReloadConfigResponse parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static org.opendedup.grpc.PortRedirector.ReloadConfigResponse parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static org.opendedup.grpc.PortRedirector.ReloadConfigResponse parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.opendedup.grpc.PortRedirector.ReloadConfigResponse parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(org.opendedup.grpc.PortRedirector.ReloadConfigResponse prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code org.opendedup.grpc.ReloadConfigResponse} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:org.opendedup.grpc.ReloadConfigResponse) + org.opendedup.grpc.PortRedirector.ReloadConfigResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.opendedup.grpc.PortRedirector.internal_static_org_opendedup_grpc_ReloadConfigResponse_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.opendedup.grpc.PortRedirector.internal_static_org_opendedup_grpc_ReloadConfigResponse_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.opendedup.grpc.PortRedirector.ReloadConfigResponse.class, org.opendedup.grpc.PortRedirector.ReloadConfigResponse.Builder.class); + } + + // Construct using org.opendedup.grpc.PortRedirector.ReloadConfigResponse.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + error_ = ""; + + errorCode_ = 0; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.opendedup.grpc.PortRedirector.internal_static_org_opendedup_grpc_ReloadConfigResponse_descriptor; + } + + @java.lang.Override + public org.opendedup.grpc.PortRedirector.ReloadConfigResponse getDefaultInstanceForType() { + return org.opendedup.grpc.PortRedirector.ReloadConfigResponse.getDefaultInstance(); + } + + @java.lang.Override + public org.opendedup.grpc.PortRedirector.ReloadConfigResponse build() { + org.opendedup.grpc.PortRedirector.ReloadConfigResponse result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public org.opendedup.grpc.PortRedirector.ReloadConfigResponse buildPartial() { + org.opendedup.grpc.PortRedirector.ReloadConfigResponse result = new org.opendedup.grpc.PortRedirector.ReloadConfigResponse(this); + result.error_ = error_; + result.errorCode_ = errorCode_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.opendedup.grpc.PortRedirector.ReloadConfigResponse) { + return mergeFrom((org.opendedup.grpc.PortRedirector.ReloadConfigResponse)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.opendedup.grpc.PortRedirector.ReloadConfigResponse other) { + if (other == org.opendedup.grpc.PortRedirector.ReloadConfigResponse.getDefaultInstance()) return this; + if (!other.getError().isEmpty()) { + error_ = other.error_; + onChanged(); + } + if (other.errorCode_ != 0) { + setErrorCodeValue(other.getErrorCodeValue()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.opendedup.grpc.PortRedirector.ReloadConfigResponse parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.opendedup.grpc.PortRedirector.ReloadConfigResponse) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private java.lang.Object error_ = ""; + /** + * string error = 1; + * @return The error. + */ + public java.lang.String getError() { + java.lang.Object ref = error_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + error_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string error = 1; + * @return The bytes for error. + */ + public com.google.protobuf.ByteString + getErrorBytes() { + java.lang.Object ref = error_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + error_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string error = 1; + * @param value The error to set. + * @return This builder for chaining. + */ + public Builder setError( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + error_ = value; + onChanged(); + return this; + } + /** + * string error = 1; + * @return This builder for chaining. + */ + public Builder clearError() { + + error_ = getDefaultInstance().getError(); + onChanged(); + return this; + } + /** + * string error = 1; + * @param value The bytes for error to set. + * @return This builder for chaining. + */ + public Builder setErrorBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + error_ = value; + onChanged(); + return this; + } + + private int errorCode_ = 0; + /** + * .org.opendedup.grpc.errorCodes errorCode = 2; + * @return The enum numeric value on the wire for errorCode. + */ + @java.lang.Override public int getErrorCodeValue() { + return errorCode_; + } + /** + * .org.opendedup.grpc.errorCodes errorCode = 2; + * @param value The enum numeric value on the wire for errorCode to set. + * @return This builder for chaining. + */ + public Builder setErrorCodeValue(int value) { + + errorCode_ = value; + onChanged(); + return this; + } + /** + * .org.opendedup.grpc.errorCodes errorCode = 2; + * @return The errorCode. + */ + @java.lang.Override + public org.opendedup.grpc.FileInfo.errorCodes getErrorCode() { + @SuppressWarnings("deprecation") + org.opendedup.grpc.FileInfo.errorCodes result = org.opendedup.grpc.FileInfo.errorCodes.valueOf(errorCode_); + return result == null ? org.opendedup.grpc.FileInfo.errorCodes.UNRECOGNIZED : result; + } + /** + * .org.opendedup.grpc.errorCodes errorCode = 2; + * @param value The errorCode to set. + * @return This builder for chaining. + */ + public Builder setErrorCode(org.opendedup.grpc.FileInfo.errorCodes value) { + if (value == null) { + throw new NullPointerException(); + } + + errorCode_ = value.getNumber(); + onChanged(); + return this; + } + /** + * .org.opendedup.grpc.errorCodes errorCode = 2; + * @return This builder for chaining. + */ + public Builder clearErrorCode() { + + errorCode_ = 0; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:org.opendedup.grpc.ReloadConfigResponse) + } + + // @@protoc_insertion_point(class_scope:org.opendedup.grpc.ReloadConfigResponse) + private static final org.opendedup.grpc.PortRedirector.ReloadConfigResponse DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new org.opendedup.grpc.PortRedirector.ReloadConfigResponse(); + } + + public static org.opendedup.grpc.PortRedirector.ReloadConfigResponse getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ReloadConfigResponse parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new ReloadConfigResponse(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public org.opendedup.grpc.PortRedirector.ReloadConfigResponse getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_org_opendedup_grpc_ProxyVolumeInfoRequest_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_org_opendedup_grpc_ProxyVolumeInfoRequest_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_org_opendedup_grpc_ProxyVolumeInfoResponse_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_org_opendedup_grpc_ProxyVolumeInfoResponse_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_org_opendedup_grpc_ReloadConfigRequest_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_org_opendedup_grpc_ReloadConfigRequest_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_org_opendedup_grpc_ReloadConfigResponse_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_org_opendedup_grpc_ReloadConfigResponse_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\024PortRedirector.proto\022\022org.opendedup.gr" + + "pc\032\016FileInfo.proto\032\023VolumeService.proto\"" + + "\030\n\026ProxyVolumeInfoRequest\"\237\001\n\027ProxyVolum" + + "eInfoResponse\022B\n\022volumeInfoResponse\030\001 \003(" + + "\0132&.org.opendedup.grpc.VolumeInfoRespons" + + "e\022\r\n\005error\030\002 \001(\t\0221\n\terrorCode\030\003 \001(\0162\036.or" + + "g.opendedup.grpc.errorCodes\"\025\n\023ReloadCon" + + "figRequest\"X\n\024ReloadConfigResponse\022\r\n\005er" + + "ror\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.org.opend" + + "edup.grpc.errorCodes2\346\001\n\025PortRedirectorS" + + "ervice\022j\n\017GetProxyVolumes\022*.org.opendedu" + + "p.grpc.ProxyVolumeInfoRequest\032+.org.open" + + "dedup.grpc.ProxyVolumeInfoResponse\022a\n\014Re" + + "loadConfig\022\'.org.opendedup.grpc.ReloadCo" + + "nfigRequest\032(.org.opendedup.grpc.ReloadC" + + "onfigResponseB0Z.github.com/opendedup/sd" + + "fs-client-go/sdfs/;sdfsb\006proto3" + }; + descriptor = com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + org.opendedup.grpc.FileInfo.getDescriptor(), + org.opendedup.grpc.VolumeServiceOuterClass.getDescriptor(), + }); + internal_static_org_opendedup_grpc_ProxyVolumeInfoRequest_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_org_opendedup_grpc_ProxyVolumeInfoRequest_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_org_opendedup_grpc_ProxyVolumeInfoRequest_descriptor, + new java.lang.String[] { }); + internal_static_org_opendedup_grpc_ProxyVolumeInfoResponse_descriptor = + getDescriptor().getMessageTypes().get(1); + internal_static_org_opendedup_grpc_ProxyVolumeInfoResponse_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_org_opendedup_grpc_ProxyVolumeInfoResponse_descriptor, + new java.lang.String[] { "VolumeInfoResponse", "Error", "ErrorCode", }); + internal_static_org_opendedup_grpc_ReloadConfigRequest_descriptor = + getDescriptor().getMessageTypes().get(2); + internal_static_org_opendedup_grpc_ReloadConfigRequest_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_org_opendedup_grpc_ReloadConfigRequest_descriptor, + new java.lang.String[] { }); + internal_static_org_opendedup_grpc_ReloadConfigResponse_descriptor = + getDescriptor().getMessageTypes().get(3); + internal_static_org_opendedup_grpc_ReloadConfigResponse_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_org_opendedup_grpc_ReloadConfigResponse_descriptor, + new java.lang.String[] { "Error", "ErrorCode", }); + org.opendedup.grpc.FileInfo.getDescriptor(); + org.opendedup.grpc.VolumeServiceOuterClass.getDescriptor(); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/src/org/opendedup/grpc/PortRedirectorServiceGrpc.java b/src/org/opendedup/grpc/PortRedirectorServiceGrpc.java new file mode 100644 index 000000000..ab69f8df0 --- /dev/null +++ b/src/org/opendedup/grpc/PortRedirectorServiceGrpc.java @@ -0,0 +1,362 @@ +package org.opendedup.grpc; + +import static io.grpc.MethodDescriptor.generateFullMethodName; +import static io.grpc.stub.ClientCalls.asyncBidiStreamingCall; +import static io.grpc.stub.ClientCalls.asyncClientStreamingCall; +import static io.grpc.stub.ClientCalls.asyncServerStreamingCall; +import static io.grpc.stub.ClientCalls.asyncUnaryCall; +import static io.grpc.stub.ClientCalls.blockingServerStreamingCall; +import static io.grpc.stub.ClientCalls.blockingUnaryCall; +import static io.grpc.stub.ClientCalls.futureUnaryCall; +import static io.grpc.stub.ServerCalls.asyncBidiStreamingCall; +import static io.grpc.stub.ServerCalls.asyncClientStreamingCall; +import static io.grpc.stub.ServerCalls.asyncServerStreamingCall; +import static io.grpc.stub.ServerCalls.asyncUnaryCall; +import static io.grpc.stub.ServerCalls.asyncUnimplementedStreamingCall; +import static io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall; + +/** + */ +@javax.annotation.Generated( + value = "by gRPC proto compiler (version 1.30.2)", + comments = "Source: PortRedirector.proto") +public final class PortRedirectorServiceGrpc { + + private PortRedirectorServiceGrpc() {} + + public static final String SERVICE_NAME = "org.opendedup.grpc.PortRedirectorService"; + + // Static method descriptors that strictly reflect the proto. + private static volatile io.grpc.MethodDescriptor getGetProxyVolumesMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "GetProxyVolumes", + requestType = org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest.class, + responseType = org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor getGetProxyVolumesMethod() { + io.grpc.MethodDescriptor getGetProxyVolumesMethod; + if ((getGetProxyVolumesMethod = PortRedirectorServiceGrpc.getGetProxyVolumesMethod) == null) { + synchronized (PortRedirectorServiceGrpc.class) { + if ((getGetProxyVolumesMethod = PortRedirectorServiceGrpc.getGetProxyVolumesMethod) == null) { + PortRedirectorServiceGrpc.getGetProxyVolumesMethod = getGetProxyVolumesMethod = + io.grpc.MethodDescriptor.newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetProxyVolumes")) + .setSampledToLocalTracing(true) + .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest.getDefaultInstance())) + .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse.getDefaultInstance())) + .setSchemaDescriptor(new PortRedirectorServiceMethodDescriptorSupplier("GetProxyVolumes")) + .build(); + } + } + } + return getGetProxyVolumesMethod; + } + + private static volatile io.grpc.MethodDescriptor getReloadConfigMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "ReloadConfig", + requestType = org.opendedup.grpc.PortRedirector.ReloadConfigRequest.class, + responseType = org.opendedup.grpc.PortRedirector.ReloadConfigResponse.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor getReloadConfigMethod() { + io.grpc.MethodDescriptor getReloadConfigMethod; + if ((getReloadConfigMethod = PortRedirectorServiceGrpc.getReloadConfigMethod) == null) { + synchronized (PortRedirectorServiceGrpc.class) { + if ((getReloadConfigMethod = PortRedirectorServiceGrpc.getReloadConfigMethod) == null) { + PortRedirectorServiceGrpc.getReloadConfigMethod = getReloadConfigMethod = + io.grpc.MethodDescriptor.newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ReloadConfig")) + .setSampledToLocalTracing(true) + .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + org.opendedup.grpc.PortRedirector.ReloadConfigRequest.getDefaultInstance())) + .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + org.opendedup.grpc.PortRedirector.ReloadConfigResponse.getDefaultInstance())) + .setSchemaDescriptor(new PortRedirectorServiceMethodDescriptorSupplier("ReloadConfig")) + .build(); + } + } + } + return getReloadConfigMethod; + } + + /** + * Creates a new async stub that supports all call types for the service + */ + public static PortRedirectorServiceStub newStub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public PortRedirectorServiceStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new PortRedirectorServiceStub(channel, callOptions); + } + }; + return PortRedirectorServiceStub.newStub(factory, channel); + } + + /** + * Creates a new blocking-style stub that supports unary and streaming output calls on the service + */ + public static PortRedirectorServiceBlockingStub newBlockingStub( + io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public PortRedirectorServiceBlockingStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new PortRedirectorServiceBlockingStub(channel, callOptions); + } + }; + return PortRedirectorServiceBlockingStub.newStub(factory, channel); + } + + /** + * Creates a new ListenableFuture-style stub that supports unary calls on the service + */ + public static PortRedirectorServiceFutureStub newFutureStub( + io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public PortRedirectorServiceFutureStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new PortRedirectorServiceFutureStub(channel, callOptions); + } + }; + return PortRedirectorServiceFutureStub.newStub(factory, channel); + } + + /** + */ + public static abstract class PortRedirectorServiceImplBase implements io.grpc.BindableService { + + /** + */ + public void getProxyVolumes(org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest request, + io.grpc.stub.StreamObserver responseObserver) { + asyncUnimplementedUnaryCall(getGetProxyVolumesMethod(), responseObserver); + } + + /** + */ + public void reloadConfig(org.opendedup.grpc.PortRedirector.ReloadConfigRequest request, + io.grpc.stub.StreamObserver responseObserver) { + asyncUnimplementedUnaryCall(getReloadConfigMethod(), responseObserver); + } + + @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() { + return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor()) + .addMethod( + getGetProxyVolumesMethod(), + asyncUnaryCall( + new MethodHandlers< + org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest, + org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse>( + this, METHODID_GET_PROXY_VOLUMES))) + .addMethod( + getReloadConfigMethod(), + asyncUnaryCall( + new MethodHandlers< + org.opendedup.grpc.PortRedirector.ReloadConfigRequest, + org.opendedup.grpc.PortRedirector.ReloadConfigResponse>( + this, METHODID_RELOAD_CONFIG))) + .build(); + } + } + + /** + */ + public static final class PortRedirectorServiceStub extends io.grpc.stub.AbstractAsyncStub { + private PortRedirectorServiceStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected PortRedirectorServiceStub build( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new PortRedirectorServiceStub(channel, callOptions); + } + + /** + */ + public void getProxyVolumes(org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest request, + io.grpc.stub.StreamObserver responseObserver) { + asyncUnaryCall( + getChannel().newCall(getGetProxyVolumesMethod(), getCallOptions()), request, responseObserver); + } + + /** + */ + public void reloadConfig(org.opendedup.grpc.PortRedirector.ReloadConfigRequest request, + io.grpc.stub.StreamObserver responseObserver) { + asyncUnaryCall( + getChannel().newCall(getReloadConfigMethod(), getCallOptions()), request, responseObserver); + } + } + + /** + */ + public static final class PortRedirectorServiceBlockingStub extends io.grpc.stub.AbstractBlockingStub { + private PortRedirectorServiceBlockingStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected PortRedirectorServiceBlockingStub build( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new PortRedirectorServiceBlockingStub(channel, callOptions); + } + + /** + */ + public org.opendedup.grpc.PortRedirector.ProxyVolumeInfoResponse getProxyVolumes(org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest request) { + return blockingUnaryCall( + getChannel(), getGetProxyVolumesMethod(), getCallOptions(), request); + } + + /** + */ + public org.opendedup.grpc.PortRedirector.ReloadConfigResponse reloadConfig(org.opendedup.grpc.PortRedirector.ReloadConfigRequest request) { + return blockingUnaryCall( + getChannel(), getReloadConfigMethod(), getCallOptions(), request); + } + } + + /** + */ + public static final class PortRedirectorServiceFutureStub extends io.grpc.stub.AbstractFutureStub { + private PortRedirectorServiceFutureStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected PortRedirectorServiceFutureStub build( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new PortRedirectorServiceFutureStub(channel, callOptions); + } + + /** + */ + public com.google.common.util.concurrent.ListenableFuture getProxyVolumes( + org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest request) { + return futureUnaryCall( + getChannel().newCall(getGetProxyVolumesMethod(), getCallOptions()), request); + } + + /** + */ + public com.google.common.util.concurrent.ListenableFuture reloadConfig( + org.opendedup.grpc.PortRedirector.ReloadConfigRequest request) { + return futureUnaryCall( + getChannel().newCall(getReloadConfigMethod(), getCallOptions()), request); + } + } + + private static final int METHODID_GET_PROXY_VOLUMES = 0; + private static final int METHODID_RELOAD_CONFIG = 1; + + private static final class MethodHandlers implements + io.grpc.stub.ServerCalls.UnaryMethod, + io.grpc.stub.ServerCalls.ServerStreamingMethod, + io.grpc.stub.ServerCalls.ClientStreamingMethod, + io.grpc.stub.ServerCalls.BidiStreamingMethod { + private final PortRedirectorServiceImplBase serviceImpl; + private final int methodId; + + MethodHandlers(PortRedirectorServiceImplBase serviceImpl, int methodId) { + this.serviceImpl = serviceImpl; + this.methodId = methodId; + } + + @java.lang.Override + @java.lang.SuppressWarnings("unchecked") + public void invoke(Req request, io.grpc.stub.StreamObserver responseObserver) { + switch (methodId) { + case METHODID_GET_PROXY_VOLUMES: + serviceImpl.getProxyVolumes((org.opendedup.grpc.PortRedirector.ProxyVolumeInfoRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + case METHODID_RELOAD_CONFIG: + serviceImpl.reloadConfig((org.opendedup.grpc.PortRedirector.ReloadConfigRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + default: + throw new AssertionError(); + } + } + + @java.lang.Override + @java.lang.SuppressWarnings("unchecked") + public io.grpc.stub.StreamObserver invoke( + io.grpc.stub.StreamObserver responseObserver) { + switch (methodId) { + default: + throw new AssertionError(); + } + } + } + + private static abstract class PortRedirectorServiceBaseDescriptorSupplier + implements io.grpc.protobuf.ProtoFileDescriptorSupplier, io.grpc.protobuf.ProtoServiceDescriptorSupplier { + PortRedirectorServiceBaseDescriptorSupplier() {} + + @java.lang.Override + public com.google.protobuf.Descriptors.FileDescriptor getFileDescriptor() { + return org.opendedup.grpc.PortRedirector.getDescriptor(); + } + + @java.lang.Override + public com.google.protobuf.Descriptors.ServiceDescriptor getServiceDescriptor() { + return getFileDescriptor().findServiceByName("PortRedirectorService"); + } + } + + private static final class PortRedirectorServiceFileDescriptorSupplier + extends PortRedirectorServiceBaseDescriptorSupplier { + PortRedirectorServiceFileDescriptorSupplier() {} + } + + private static final class PortRedirectorServiceMethodDescriptorSupplier + extends PortRedirectorServiceBaseDescriptorSupplier + implements io.grpc.protobuf.ProtoMethodDescriptorSupplier { + private final String methodName; + + PortRedirectorServiceMethodDescriptorSupplier(String methodName) { + this.methodName = methodName; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.MethodDescriptor getMethodDescriptor() { + return getServiceDescriptor().findMethodByName(methodName); + } + } + + private static volatile io.grpc.ServiceDescriptor serviceDescriptor; + + public static io.grpc.ServiceDescriptor getServiceDescriptor() { + io.grpc.ServiceDescriptor result = serviceDescriptor; + if (result == null) { + synchronized (PortRedirectorServiceGrpc.class) { + result = serviceDescriptor; + if (result == null) { + serviceDescriptor = result = io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME) + .setSchemaDescriptor(new PortRedirectorServiceFileDescriptorSupplier()) + .addMethod(getGetProxyVolumesMethod()) + .addMethod(getReloadConfigMethod()) + .build(); + } + } + } + return result; + } +} diff --git a/src/org/opendedup/grpc/SDFSCli.java b/src/org/opendedup/grpc/SDFSCli.java index da62cfa55..1702a4887 100644 --- a/src/org/opendedup/grpc/SDFSCli.java +++ b/src/org/opendedup/grpc/SDFSCli.java @@ -3439,6 +3439,12 @@ public interface AddUserRequestOrBuilder extends * .org.opendedup.grpc.SdfsPermissions permissions = 5; */ org.opendedup.grpc.SDFSCli.SdfsPermissionsOrBuilder getPermissionsOrBuilder(); + + /** + * int64 pvolumeID = 6; + * @return The pvolumeID. + */ + long getPvolumeID(); } /** * Protobuf type {@code org.opendedup.grpc.AddUserRequest} @@ -3519,6 +3525,11 @@ private AddUserRequest( break; } + case 48: { + + pvolumeID_ = input.readInt64(); + break; + } default: { if (!parseUnknownField( input, unknownFields, extensionRegistry, tag)) { @@ -3691,6 +3702,17 @@ public org.opendedup.grpc.SDFSCli.SdfsPermissionsOrBuilder getPermissionsOrBuild return getPermissions(); } + public static final int PVOLUMEID_FIELD_NUMBER = 6; + private long pvolumeID_; + /** + * int64 pvolumeID = 6; + * @return The pvolumeID. + */ + @java.lang.Override + public long getPvolumeID() { + return pvolumeID_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -3717,6 +3739,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (permissions_ != null) { output.writeMessage(5, getPermissions()); } + if (pvolumeID_ != 0L) { + output.writeInt64(6, pvolumeID_); + } unknownFields.writeTo(output); } @@ -3739,6 +3764,10 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream .computeMessageSize(5, getPermissions()); } + if (pvolumeID_ != 0L) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(6, pvolumeID_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -3765,6 +3794,8 @@ public boolean equals(final java.lang.Object obj) { if (!getPermissions() .equals(other.getPermissions())) return false; } + if (getPvolumeID() + != other.getPvolumeID()) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -3786,6 +3817,9 @@ public int hashCode() { hash = (37 * hash) + PERMISSIONS_FIELD_NUMBER; hash = (53 * hash) + getPermissions().hashCode(); } + hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getPvolumeID()); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -3931,6 +3965,8 @@ public Builder clear() { permissions_ = null; permissionsBuilder_ = null; } + pvolumeID_ = 0L; + return this; } @@ -3965,6 +4001,7 @@ public org.opendedup.grpc.SDFSCli.AddUserRequest buildPartial() { } else { result.permissions_ = permissionsBuilder_.build(); } + result.pvolumeID_ = pvolumeID_; onBuilt(); return result; } @@ -4028,6 +4065,9 @@ public Builder mergeFrom(org.opendedup.grpc.SDFSCli.AddUserRequest other) { if (other.hasPermissions()) { mergePermissions(other.getPermissions()); } + if (other.getPvolumeID() != 0L) { + setPvolumeID(other.getPvolumeID()); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -4403,6 +4443,37 @@ public org.opendedup.grpc.SDFSCli.SdfsPermissionsOrBuilder getPermissionsOrBuild } return permissionsBuilder_; } + + private long pvolumeID_ ; + /** + * int64 pvolumeID = 6; + * @return The pvolumeID. + */ + @java.lang.Override + public long getPvolumeID() { + return pvolumeID_; + } + /** + * int64 pvolumeID = 6; + * @param value The pvolumeID to set. + * @return This builder for chaining. + */ + public Builder setPvolumeID(long value) { + + pvolumeID_ = value; + onChanged(); + return this; + } + /** + * int64 pvolumeID = 6; + * @return This builder for chaining. + */ + public Builder clearPvolumeID() { + + pvolumeID_ = 0L; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -5146,6 +5217,12 @@ public interface DeleteUserRequestOrBuilder extends */ com.google.protobuf.ByteString getUserBytes(); + + /** + * int64 pvolumeID = 2; + * @return The pvolumeID. + */ + long getPvolumeID(); } /** * Protobuf type {@code org.opendedup.grpc.DeleteUserRequest} @@ -5199,6 +5276,11 @@ private DeleteUserRequest( user_ = s; break; } + case 16: { + + pvolumeID_ = input.readInt64(); + break; + } default: { if (!parseUnknownField( input, unknownFields, extensionRegistry, tag)) { @@ -5269,6 +5351,17 @@ public java.lang.String getUser() { } } + public static final int PVOLUMEID_FIELD_NUMBER = 2; + private long pvolumeID_; + /** + * int64 pvolumeID = 2; + * @return The pvolumeID. + */ + @java.lang.Override + public long getPvolumeID() { + return pvolumeID_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -5286,6 +5379,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (!getUserBytes().isEmpty()) { com.google.protobuf.GeneratedMessageV3.writeString(output, 1, user_); } + if (pvolumeID_ != 0L) { + output.writeInt64(2, pvolumeID_); + } unknownFields.writeTo(output); } @@ -5298,6 +5394,10 @@ public int getSerializedSize() { if (!getUserBytes().isEmpty()) { size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, user_); } + if (pvolumeID_ != 0L) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(2, pvolumeID_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -5315,6 +5415,8 @@ public boolean equals(final java.lang.Object obj) { if (!getUser() .equals(other.getUser())) return false; + if (getPvolumeID() + != other.getPvolumeID()) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -5328,6 +5430,9 @@ public int hashCode() { hash = (19 * hash) + getDescriptor().hashCode(); hash = (37 * hash) + USER_FIELD_NUMBER; hash = (53 * hash) + getUser().hashCode(); + hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getPvolumeID()); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -5463,6 +5568,8 @@ public Builder clear() { super.clear(); user_ = ""; + pvolumeID_ = 0L; + return this; } @@ -5490,6 +5597,7 @@ public org.opendedup.grpc.SDFSCli.DeleteUserRequest build() { public org.opendedup.grpc.SDFSCli.DeleteUserRequest buildPartial() { org.opendedup.grpc.SDFSCli.DeleteUserRequest result = new org.opendedup.grpc.SDFSCli.DeleteUserRequest(this); result.user_ = user_; + result.pvolumeID_ = pvolumeID_; onBuilt(); return result; } @@ -5542,6 +5650,9 @@ public Builder mergeFrom(org.opendedup.grpc.SDFSCli.DeleteUserRequest other) { user_ = other.user_; onChanged(); } + if (other.getPvolumeID() != 0L) { + setPvolumeID(other.getPvolumeID()); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -5646,6 +5757,37 @@ public Builder setUserBytes( onChanged(); return this; } + + private long pvolumeID_ ; + /** + * int64 pvolumeID = 2; + * @return The pvolumeID. + */ + @java.lang.Override + public long getPvolumeID() { + return pvolumeID_; + } + /** + * int64 pvolumeID = 2; + * @param value The pvolumeID to set. + * @return This builder for chaining. + */ + public Builder setPvolumeID(long value) { + + pvolumeID_ = value; + onChanged(); + return this; + } + /** + * int64 pvolumeID = 2; + * @return This builder for chaining. + */ + public Builder clearPvolumeID() { + + pvolumeID_ = 0L; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -6391,19 +6533,25 @@ public interface SetPermissionsRequestOrBuilder extends getUserBytes(); /** - * .org.opendedup.grpc.SdfsPermissions permissions = 5; + * .org.opendedup.grpc.SdfsPermissions permissions = 2; * @return Whether the permissions field is set. */ boolean hasPermissions(); /** - * .org.opendedup.grpc.SdfsPermissions permissions = 5; + * .org.opendedup.grpc.SdfsPermissions permissions = 2; * @return The permissions. */ org.opendedup.grpc.SDFSCli.SdfsPermissions getPermissions(); /** - * .org.opendedup.grpc.SdfsPermissions permissions = 5; + * .org.opendedup.grpc.SdfsPermissions permissions = 2; */ org.opendedup.grpc.SDFSCli.SdfsPermissionsOrBuilder getPermissionsOrBuilder(); + + /** + * int64 pvolumeID = 3; + * @return The pvolumeID. + */ + long getPvolumeID(); } /** * Protobuf type {@code org.opendedup.grpc.SetPermissionsRequest} @@ -6457,7 +6605,7 @@ private SetPermissionsRequest( user_ = s; break; } - case 42: { + case 18: { org.opendedup.grpc.SDFSCli.SdfsPermissions.Builder subBuilder = null; if (permissions_ != null) { subBuilder = permissions_.toBuilder(); @@ -6470,6 +6618,11 @@ private SetPermissionsRequest( break; } + case 24: { + + pvolumeID_ = input.readInt64(); + break; + } default: { if (!parseUnknownField( input, unknownFields, extensionRegistry, tag)) { @@ -6540,10 +6693,10 @@ public java.lang.String getUser() { } } - public static final int PERMISSIONS_FIELD_NUMBER = 5; + public static final int PERMISSIONS_FIELD_NUMBER = 2; private org.opendedup.grpc.SDFSCli.SdfsPermissions permissions_; /** - * .org.opendedup.grpc.SdfsPermissions permissions = 5; + * .org.opendedup.grpc.SdfsPermissions permissions = 2; * @return Whether the permissions field is set. */ @java.lang.Override @@ -6551,7 +6704,7 @@ public boolean hasPermissions() { return permissions_ != null; } /** - * .org.opendedup.grpc.SdfsPermissions permissions = 5; + * .org.opendedup.grpc.SdfsPermissions permissions = 2; * @return The permissions. */ @java.lang.Override @@ -6559,13 +6712,24 @@ public org.opendedup.grpc.SDFSCli.SdfsPermissions getPermissions() { return permissions_ == null ? org.opendedup.grpc.SDFSCli.SdfsPermissions.getDefaultInstance() : permissions_; } /** - * .org.opendedup.grpc.SdfsPermissions permissions = 5; + * .org.opendedup.grpc.SdfsPermissions permissions = 2; */ @java.lang.Override public org.opendedup.grpc.SDFSCli.SdfsPermissionsOrBuilder getPermissionsOrBuilder() { return getPermissions(); } + public static final int PVOLUMEID_FIELD_NUMBER = 3; + private long pvolumeID_; + /** + * int64 pvolumeID = 3; + * @return The pvolumeID. + */ + @java.lang.Override + public long getPvolumeID() { + return pvolumeID_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -6584,7 +6748,10 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) com.google.protobuf.GeneratedMessageV3.writeString(output, 1, user_); } if (permissions_ != null) { - output.writeMessage(5, getPermissions()); + output.writeMessage(2, getPermissions()); + } + if (pvolumeID_ != 0L) { + output.writeInt64(3, pvolumeID_); } unknownFields.writeTo(output); } @@ -6600,7 +6767,11 @@ public int getSerializedSize() { } if (permissions_ != null) { size += com.google.protobuf.CodedOutputStream - .computeMessageSize(5, getPermissions()); + .computeMessageSize(2, getPermissions()); + } + if (pvolumeID_ != 0L) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(3, pvolumeID_); } size += unknownFields.getSerializedSize(); memoizedSize = size; @@ -6624,6 +6795,8 @@ public boolean equals(final java.lang.Object obj) { if (!getPermissions() .equals(other.getPermissions())) return false; } + if (getPvolumeID() + != other.getPvolumeID()) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -6641,6 +6814,9 @@ public int hashCode() { hash = (37 * hash) + PERMISSIONS_FIELD_NUMBER; hash = (53 * hash) + getPermissions().hashCode(); } + hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getPvolumeID()); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -6782,6 +6958,8 @@ public Builder clear() { permissions_ = null; permissionsBuilder_ = null; } + pvolumeID_ = 0L; + return this; } @@ -6814,6 +6992,7 @@ public org.opendedup.grpc.SDFSCli.SetPermissionsRequest buildPartial() { } else { result.permissions_ = permissionsBuilder_.build(); } + result.pvolumeID_ = pvolumeID_; onBuilt(); return result; } @@ -6869,6 +7048,9 @@ public Builder mergeFrom(org.opendedup.grpc.SDFSCli.SetPermissionsRequest other) if (other.hasPermissions()) { mergePermissions(other.getPermissions()); } + if (other.getPvolumeID() != 0L) { + setPvolumeID(other.getPvolumeID()); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -6978,14 +7160,14 @@ public Builder setUserBytes( private com.google.protobuf.SingleFieldBuilderV3< org.opendedup.grpc.SDFSCli.SdfsPermissions, org.opendedup.grpc.SDFSCli.SdfsPermissions.Builder, org.opendedup.grpc.SDFSCli.SdfsPermissionsOrBuilder> permissionsBuilder_; /** - * .org.opendedup.grpc.SdfsPermissions permissions = 5; + * .org.opendedup.grpc.SdfsPermissions permissions = 2; * @return Whether the permissions field is set. */ public boolean hasPermissions() { return permissionsBuilder_ != null || permissions_ != null; } /** - * .org.opendedup.grpc.SdfsPermissions permissions = 5; + * .org.opendedup.grpc.SdfsPermissions permissions = 2; * @return The permissions. */ public org.opendedup.grpc.SDFSCli.SdfsPermissions getPermissions() { @@ -6996,7 +7178,7 @@ public org.opendedup.grpc.SDFSCli.SdfsPermissions getPermissions() { } } /** - * .org.opendedup.grpc.SdfsPermissions permissions = 5; + * .org.opendedup.grpc.SdfsPermissions permissions = 2; */ public Builder setPermissions(org.opendedup.grpc.SDFSCli.SdfsPermissions value) { if (permissionsBuilder_ == null) { @@ -7012,7 +7194,7 @@ public Builder setPermissions(org.opendedup.grpc.SDFSCli.SdfsPermissions value) return this; } /** - * .org.opendedup.grpc.SdfsPermissions permissions = 5; + * .org.opendedup.grpc.SdfsPermissions permissions = 2; */ public Builder setPermissions( org.opendedup.grpc.SDFSCli.SdfsPermissions.Builder builderForValue) { @@ -7026,7 +7208,7 @@ public Builder setPermissions( return this; } /** - * .org.opendedup.grpc.SdfsPermissions permissions = 5; + * .org.opendedup.grpc.SdfsPermissions permissions = 2; */ public Builder mergePermissions(org.opendedup.grpc.SDFSCli.SdfsPermissions value) { if (permissionsBuilder_ == null) { @@ -7044,7 +7226,7 @@ public Builder mergePermissions(org.opendedup.grpc.SDFSCli.SdfsPermissions value return this; } /** - * .org.opendedup.grpc.SdfsPermissions permissions = 5; + * .org.opendedup.grpc.SdfsPermissions permissions = 2; */ public Builder clearPermissions() { if (permissionsBuilder_ == null) { @@ -7058,7 +7240,7 @@ public Builder clearPermissions() { return this; } /** - * .org.opendedup.grpc.SdfsPermissions permissions = 5; + * .org.opendedup.grpc.SdfsPermissions permissions = 2; */ public org.opendedup.grpc.SDFSCli.SdfsPermissions.Builder getPermissionsBuilder() { @@ -7066,7 +7248,7 @@ public org.opendedup.grpc.SDFSCli.SdfsPermissions.Builder getPermissionsBuilder( return getPermissionsFieldBuilder().getBuilder(); } /** - * .org.opendedup.grpc.SdfsPermissions permissions = 5; + * .org.opendedup.grpc.SdfsPermissions permissions = 2; */ public org.opendedup.grpc.SDFSCli.SdfsPermissionsOrBuilder getPermissionsOrBuilder() { if (permissionsBuilder_ != null) { @@ -7077,7 +7259,7 @@ public org.opendedup.grpc.SDFSCli.SdfsPermissionsOrBuilder getPermissionsOrBuild } } /** - * .org.opendedup.grpc.SdfsPermissions permissions = 5; + * .org.opendedup.grpc.SdfsPermissions permissions = 2; */ private com.google.protobuf.SingleFieldBuilderV3< org.opendedup.grpc.SDFSCli.SdfsPermissions, org.opendedup.grpc.SDFSCli.SdfsPermissions.Builder, org.opendedup.grpc.SDFSCli.SdfsPermissionsOrBuilder> @@ -7092,6 +7274,37 @@ public org.opendedup.grpc.SDFSCli.SdfsPermissionsOrBuilder getPermissionsOrBuild } return permissionsBuilder_; } + + private long pvolumeID_ ; + /** + * int64 pvolumeID = 3; + * @return The pvolumeID. + */ + @java.lang.Override + public long getPvolumeID() { + return pvolumeID_; + } + /** + * int64 pvolumeID = 3; + * @param value The pvolumeID to set. + * @return This builder for chaining. + */ + public Builder setPvolumeID(long value) { + + pvolumeID_ = value; + onChanged(); + return this; + } + /** + * int64 pvolumeID = 3; + * @return This builder for chaining. + */ + public Builder clearPvolumeID() { + + pvolumeID_ = 0L; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -7847,6 +8060,12 @@ public interface SetUserPasswordRequestOrBuilder extends */ com.google.protobuf.ByteString getPasswordBytes(); + + /** + * int64 pvolumeID = 3; + * @return The pvolumeID. + */ + long getPvolumeID(); } /** * Protobuf type {@code org.opendedup.grpc.SetUserPasswordRequest} @@ -7907,6 +8126,11 @@ private SetUserPasswordRequest( password_ = s; break; } + case 24: { + + pvolumeID_ = input.readInt64(); + break; + } default: { if (!parseUnknownField( input, unknownFields, extensionRegistry, tag)) { @@ -8015,6 +8239,17 @@ public java.lang.String getPassword() { } } + public static final int PVOLUMEID_FIELD_NUMBER = 3; + private long pvolumeID_; + /** + * int64 pvolumeID = 3; + * @return The pvolumeID. + */ + @java.lang.Override + public long getPvolumeID() { + return pvolumeID_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -8035,6 +8270,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (!getPasswordBytes().isEmpty()) { com.google.protobuf.GeneratedMessageV3.writeString(output, 2, password_); } + if (pvolumeID_ != 0L) { + output.writeInt64(3, pvolumeID_); + } unknownFields.writeTo(output); } @@ -8050,6 +8288,10 @@ public int getSerializedSize() { if (!getPasswordBytes().isEmpty()) { size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, password_); } + if (pvolumeID_ != 0L) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(3, pvolumeID_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -8069,6 +8311,8 @@ public boolean equals(final java.lang.Object obj) { .equals(other.getUser())) return false; if (!getPassword() .equals(other.getPassword())) return false; + if (getPvolumeID() + != other.getPvolumeID()) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -8084,6 +8328,9 @@ public int hashCode() { hash = (53 * hash) + getUser().hashCode(); hash = (37 * hash) + PASSWORD_FIELD_NUMBER; hash = (53 * hash) + getPassword().hashCode(); + hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getPvolumeID()); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -8221,6 +8468,8 @@ public Builder clear() { password_ = ""; + pvolumeID_ = 0L; + return this; } @@ -8249,6 +8498,7 @@ public org.opendedup.grpc.SDFSCli.SetUserPasswordRequest buildPartial() { org.opendedup.grpc.SDFSCli.SetUserPasswordRequest result = new org.opendedup.grpc.SDFSCli.SetUserPasswordRequest(this); result.user_ = user_; result.password_ = password_; + result.pvolumeID_ = pvolumeID_; onBuilt(); return result; } @@ -8305,6 +8555,9 @@ public Builder mergeFrom(org.opendedup.grpc.SDFSCli.SetUserPasswordRequest other password_ = other.password_; onChanged(); } + if (other.getPvolumeID() != 0L) { + setPvolumeID(other.getPvolumeID()); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -8485,6 +8738,37 @@ public Builder setPasswordBytes( onChanged(); return this; } + + private long pvolumeID_ ; + /** + * int64 pvolumeID = 3; + * @return The pvolumeID. + */ + @java.lang.Override + public long getPvolumeID() { + return pvolumeID_; + } + /** + * int64 pvolumeID = 3; + * @param value The pvolumeID to set. + * @return This builder for chaining. + */ + public Builder setPvolumeID(long value) { + + pvolumeID_ = value; + onChanged(); + return this; + } + /** + * int64 pvolumeID = 3; + * @return This builder for chaining. + */ + public Builder clearPvolumeID() { + + pvolumeID_ = 0L; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -9216,6 +9500,12 @@ public org.opendedup.grpc.SDFSCli.SetUserPasswordResponse getDefaultInstanceForT public interface ListUsersRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:org.opendedup.grpc.ListUsersRequest) com.google.protobuf.MessageOrBuilder { + + /** + * int64 pvolumeID = 1; + * @return The pvolumeID. + */ + long getPvolumeID(); } /** * Protobuf type {@code org.opendedup.grpc.ListUsersRequest} @@ -9262,6 +9552,11 @@ private ListUsersRequest( case 0: done = true; break; + case 8: { + + pvolumeID_ = input.readInt64(); + break; + } default: { if (!parseUnknownField( input, unknownFields, extensionRegistry, tag)) { @@ -9294,6 +9589,17 @@ private ListUsersRequest( org.opendedup.grpc.SDFSCli.ListUsersRequest.class, org.opendedup.grpc.SDFSCli.ListUsersRequest.Builder.class); } + public static final int PVOLUMEID_FIELD_NUMBER = 1; + private long pvolumeID_; + /** + * int64 pvolumeID = 1; + * @return The pvolumeID. + */ + @java.lang.Override + public long getPvolumeID() { + return pvolumeID_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -9308,6 +9614,9 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (pvolumeID_ != 0L) { + output.writeInt64(1, pvolumeID_); + } unknownFields.writeTo(output); } @@ -9317,6 +9626,10 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; + if (pvolumeID_ != 0L) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(1, pvolumeID_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -9332,6 +9645,8 @@ public boolean equals(final java.lang.Object obj) { } org.opendedup.grpc.SDFSCli.ListUsersRequest other = (org.opendedup.grpc.SDFSCli.ListUsersRequest) obj; + if (getPvolumeID() + != other.getPvolumeID()) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -9343,6 +9658,9 @@ public int hashCode() { } int hash = 41; hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getPvolumeID()); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -9476,6 +9794,8 @@ private void maybeForceBuilderInitialization() { @java.lang.Override public Builder clear() { super.clear(); + pvolumeID_ = 0L; + return this; } @@ -9502,6 +9822,7 @@ public org.opendedup.grpc.SDFSCli.ListUsersRequest build() { @java.lang.Override public org.opendedup.grpc.SDFSCli.ListUsersRequest buildPartial() { org.opendedup.grpc.SDFSCli.ListUsersRequest result = new org.opendedup.grpc.SDFSCli.ListUsersRequest(this); + result.pvolumeID_ = pvolumeID_; onBuilt(); return result; } @@ -9550,6 +9871,9 @@ public Builder mergeFrom(com.google.protobuf.Message other) { public Builder mergeFrom(org.opendedup.grpc.SDFSCli.ListUsersRequest other) { if (other == org.opendedup.grpc.SDFSCli.ListUsersRequest.getDefaultInstance()) return this; + if (other.getPvolumeID() != 0L) { + setPvolumeID(other.getPvolumeID()); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -9578,6 +9902,37 @@ public Builder mergeFrom( } return this; } + + private long pvolumeID_ ; + /** + * int64 pvolumeID = 1; + * @return The pvolumeID. + */ + @java.lang.Override + public long getPvolumeID() { + return pvolumeID_; + } + /** + * int64 pvolumeID = 1; + * @param value The pvolumeID to set. + * @return This builder for chaining. + */ + public Builder setPvolumeID(long value) { + + pvolumeID_ = value; + onChanged(); + return this; + } + /** + * int64 pvolumeID = 1; + * @return This builder for chaining. + */ + public Builder clearPvolumeID() { + + pvolumeID_ = 0L; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -10776,42 +11131,44 @@ public org.opendedup.grpc.SDFSCli.ListUsersResponse getDefaultInstanceForType() "users\030\001 \003(\0132(.org.opendedup.grpc.SdfsUse" + "rs.UsersEntry\032J\n\nUsersEntry\022\013\n\003key\030\001 \001(\t" + "\022+\n\005value\030\002 \001(\0132\034.org.opendedup.grpc.Sdf" + - "sUser:\0028\001\"\177\n\016AddUserRequest\022\014\n\004user\030\001 \001(" + - "\t\022\020\n\010password\030\002 \001(\t\022\023\n\013description\030\003 \001(\t" + - "\0228\n\013permissions\030\005 \001(\0132#.org.opendedup.gr" + - "pc.SdfsPermissions\"S\n\017AddUserResponse\022\r\n" + - "\005error\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.org.op" + - "endedup.grpc.errorCodes\"!\n\021DeleteUserReq" + - "uest\022\014\n\004user\030\001 \001(\t\"V\n\022DeleteUserResponse" + - "\022\r\n\005error\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.org" + - ".opendedup.grpc.errorCodes\"_\n\025SetPermiss" + - "ionsRequest\022\014\n\004user\030\001 \001(\t\0228\n\013permissions" + - "\030\005 \001(\0132#.org.opendedup.grpc.SdfsPermissi" + - "ons\"Z\n\026SetPermissionsResponse\022\r\n\005error\030\001" + - " \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.org.opendedup." + - "grpc.errorCodes\"8\n\026SetUserPasswordReques" + - "t\022\014\n\004user\030\001 \001(\t\022\020\n\010password\030\002 \001(\t\"[\n\027Set" + - "UserPasswordResponse\022\r\n\005error\030\001 \001(\t\0221\n\te" + - "rrorCode\030\002 \001(\0162\036.org.opendedup.grpc.erro" + - "rCodes\"\022\n\020ListUsersRequest\"\202\001\n\021ListUsers" + - "Response\022+\n\005users\030\001 \003(\0132\034.org.opendedup." + - "grpc.SdfsUser\022\r\n\005error\030\002 \001(\t\0221\n\terrorCod" + - "e\030\003 \001(\0162\036.org.opendedup.grpc.errorCodes2" + - "\365\003\n\017SdfsUserService\022R\n\007AddUser\022\".org.ope" + - "ndedup.grpc.AddUserRequest\032#.org.opended" + - "up.grpc.AddUserResponse\022[\n\nDeleteUser\022%." + - "org.opendedup.grpc.DeleteUserRequest\032&.o" + - "rg.opendedup.grpc.DeleteUserResponse\022k\n\022" + - "SetSdfsPermissions\022).org.opendedup.grpc." + - "SetPermissionsRequest\032*.org.opendedup.gr" + - "pc.SetPermissionsResponse\022j\n\017SetSdfsPass" + - "word\022*.org.opendedup.grpc.SetUserPasswor" + - "dRequest\032+.org.opendedup.grpc.SetUserPas" + - "swordResponse\022X\n\tListUsers\022$.org.opended" + - "up.grpc.ListUsersRequest\032%.org.opendedup" + - ".grpc.ListUsersResponseB0Z.github.com/op" + - "endedup/sdfs-client-go/sdfs/;sdfsb\006proto" + - "3" + "sUser:\0028\001\"\222\001\n\016AddUserRequest\022\014\n\004user\030\001 \001" + + "(\t\022\020\n\010password\030\002 \001(\t\022\023\n\013description\030\003 \001(" + + "\t\0228\n\013permissions\030\005 \001(\0132#.org.opendedup.g" + + "rpc.SdfsPermissions\022\021\n\tpvolumeID\030\006 \001(\003\"S" + + "\n\017AddUserResponse\022\r\n\005error\030\001 \001(\t\0221\n\terro" + + "rCode\030\002 \001(\0162\036.org.opendedup.grpc.errorCo" + + "des\"4\n\021DeleteUserRequest\022\014\n\004user\030\001 \001(\t\022\021" + + "\n\tpvolumeID\030\002 \001(\003\"V\n\022DeleteUserResponse\022" + + "\r\n\005error\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.org." + + "opendedup.grpc.errorCodes\"r\n\025SetPermissi" + + "onsRequest\022\014\n\004user\030\001 \001(\t\0228\n\013permissions\030" + + "\002 \001(\0132#.org.opendedup.grpc.SdfsPermissio" + + "ns\022\021\n\tpvolumeID\030\003 \001(\003\"Z\n\026SetPermissionsR" + + "esponse\022\r\n\005error\030\001 \001(\t\0221\n\terrorCode\030\002 \001(" + + "\0162\036.org.opendedup.grpc.errorCodes\"K\n\026Set" + + "UserPasswordRequest\022\014\n\004user\030\001 \001(\t\022\020\n\010pas" + + "sword\030\002 \001(\t\022\021\n\tpvolumeID\030\003 \001(\003\"[\n\027SetUse" + + "rPasswordResponse\022\r\n\005error\030\001 \001(\t\0221\n\terro" + + "rCode\030\002 \001(\0162\036.org.opendedup.grpc.errorCo" + + "des\"%\n\020ListUsersRequest\022\021\n\tpvolumeID\030\001 \001" + + "(\003\"\202\001\n\021ListUsersResponse\022+\n\005users\030\001 \003(\0132" + + "\034.org.opendedup.grpc.SdfsUser\022\r\n\005error\030\002" + + " \001(\t\0221\n\terrorCode\030\003 \001(\0162\036.org.opendedup." + + "grpc.errorCodes2\365\003\n\017SdfsUserService\022R\n\007A" + + "ddUser\022\".org.opendedup.grpc.AddUserReque" + + "st\032#.org.opendedup.grpc.AddUserResponse\022" + + "[\n\nDeleteUser\022%.org.opendedup.grpc.Delet" + + "eUserRequest\032&.org.opendedup.grpc.Delete" + + "UserResponse\022k\n\022SetSdfsPermissions\022).org" + + ".opendedup.grpc.SetPermissionsRequest\032*." + + "org.opendedup.grpc.SetPermissionsRespons" + + "e\022j\n\017SetSdfsPassword\022*.org.opendedup.grp" + + "c.SetUserPasswordRequest\032+.org.opendedup" + + ".grpc.SetUserPasswordResponse\022X\n\tListUse" + + "rs\022$.org.opendedup.grpc.ListUsersRequest" + + "\032%.org.opendedup.grpc.ListUsersResponseB" + + "0Z.github.com/opendedup/sdfs-client-go/s" + + "dfs/;sdfsb\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor .internalBuildGeneratedFileFrom(descriptorData, @@ -10847,7 +11204,7 @@ public org.opendedup.grpc.SDFSCli.ListUsersResponse getDefaultInstanceForType() internal_static_org_opendedup_grpc_AddUserRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_org_opendedup_grpc_AddUserRequest_descriptor, - new java.lang.String[] { "User", "Password", "Description", "Permissions", }); + new java.lang.String[] { "User", "Password", "Description", "Permissions", "PvolumeID", }); internal_static_org_opendedup_grpc_AddUserResponse_descriptor = getDescriptor().getMessageTypes().get(4); internal_static_org_opendedup_grpc_AddUserResponse_fieldAccessorTable = new @@ -10859,7 +11216,7 @@ public org.opendedup.grpc.SDFSCli.ListUsersResponse getDefaultInstanceForType() internal_static_org_opendedup_grpc_DeleteUserRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_org_opendedup_grpc_DeleteUserRequest_descriptor, - new java.lang.String[] { "User", }); + new java.lang.String[] { "User", "PvolumeID", }); internal_static_org_opendedup_grpc_DeleteUserResponse_descriptor = getDescriptor().getMessageTypes().get(6); internal_static_org_opendedup_grpc_DeleteUserResponse_fieldAccessorTable = new @@ -10871,7 +11228,7 @@ public org.opendedup.grpc.SDFSCli.ListUsersResponse getDefaultInstanceForType() internal_static_org_opendedup_grpc_SetPermissionsRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_org_opendedup_grpc_SetPermissionsRequest_descriptor, - new java.lang.String[] { "User", "Permissions", }); + new java.lang.String[] { "User", "Permissions", "PvolumeID", }); internal_static_org_opendedup_grpc_SetPermissionsResponse_descriptor = getDescriptor().getMessageTypes().get(8); internal_static_org_opendedup_grpc_SetPermissionsResponse_fieldAccessorTable = new @@ -10883,7 +11240,7 @@ public org.opendedup.grpc.SDFSCli.ListUsersResponse getDefaultInstanceForType() internal_static_org_opendedup_grpc_SetUserPasswordRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_org_opendedup_grpc_SetUserPasswordRequest_descriptor, - new java.lang.String[] { "User", "Password", }); + new java.lang.String[] { "User", "Password", "PvolumeID", }); internal_static_org_opendedup_grpc_SetUserPasswordResponse_descriptor = getDescriptor().getMessageTypes().get(10); internal_static_org_opendedup_grpc_SetUserPasswordResponse_fieldAccessorTable = new @@ -10895,7 +11252,7 @@ public org.opendedup.grpc.SDFSCli.ListUsersResponse getDefaultInstanceForType() internal_static_org_opendedup_grpc_ListUsersRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_org_opendedup_grpc_ListUsersRequest_descriptor, - new java.lang.String[] { }); + new java.lang.String[] { "PvolumeID", }); internal_static_org_opendedup_grpc_ListUsersResponse_descriptor = getDescriptor().getMessageTypes().get(12); internal_static_org_opendedup_grpc_ListUsersResponse_fieldAccessorTable = new diff --git a/src/org/opendedup/grpc/SDFSEventOuterClass.java b/src/org/opendedup/grpc/SDFSEventOuterClass.java index 1c2879820..96892f711 100644 --- a/src/org/opendedup/grpc/SDFSEventOuterClass.java +++ b/src/org/opendedup/grpc/SDFSEventOuterClass.java @@ -2611,6 +2611,12 @@ public interface SDFSEventRequestOrBuilder extends */ com.google.protobuf.ByteString getUuidBytes(); + + /** + * int64 pvolumeID = 2; + * @return The pvolumeID. + */ + long getPvolumeID(); } /** * Protobuf type {@code org.opendedup.grpc.SDFSEventRequest} @@ -2664,6 +2670,11 @@ private SDFSEventRequest( uuid_ = s; break; } + case 16: { + + pvolumeID_ = input.readInt64(); + break; + } default: { if (!parseUnknownField( input, unknownFields, extensionRegistry, tag)) { @@ -2734,6 +2745,17 @@ public java.lang.String getUuid() { } } + public static final int PVOLUMEID_FIELD_NUMBER = 2; + private long pvolumeID_; + /** + * int64 pvolumeID = 2; + * @return The pvolumeID. + */ + @java.lang.Override + public long getPvolumeID() { + return pvolumeID_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -2751,6 +2773,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (!getUuidBytes().isEmpty()) { com.google.protobuf.GeneratedMessageV3.writeString(output, 1, uuid_); } + if (pvolumeID_ != 0L) { + output.writeInt64(2, pvolumeID_); + } unknownFields.writeTo(output); } @@ -2763,6 +2788,10 @@ public int getSerializedSize() { if (!getUuidBytes().isEmpty()) { size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, uuid_); } + if (pvolumeID_ != 0L) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(2, pvolumeID_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -2780,6 +2809,8 @@ public boolean equals(final java.lang.Object obj) { if (!getUuid() .equals(other.getUuid())) return false; + if (getPvolumeID() + != other.getPvolumeID()) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -2793,6 +2824,9 @@ public int hashCode() { hash = (19 * hash) + getDescriptor().hashCode(); hash = (37 * hash) + UUID_FIELD_NUMBER; hash = (53 * hash) + getUuid().hashCode(); + hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getPvolumeID()); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -2928,6 +2962,8 @@ public Builder clear() { super.clear(); uuid_ = ""; + pvolumeID_ = 0L; + return this; } @@ -2955,6 +2991,7 @@ public org.opendedup.grpc.SDFSEventOuterClass.SDFSEventRequest build() { public org.opendedup.grpc.SDFSEventOuterClass.SDFSEventRequest buildPartial() { org.opendedup.grpc.SDFSEventOuterClass.SDFSEventRequest result = new org.opendedup.grpc.SDFSEventOuterClass.SDFSEventRequest(this); result.uuid_ = uuid_; + result.pvolumeID_ = pvolumeID_; onBuilt(); return result; } @@ -3007,6 +3044,9 @@ public Builder mergeFrom(org.opendedup.grpc.SDFSEventOuterClass.SDFSEventRequest uuid_ = other.uuid_; onChanged(); } + if (other.getPvolumeID() != 0L) { + setPvolumeID(other.getPvolumeID()); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -3111,6 +3151,37 @@ public Builder setUuidBytes( onChanged(); return this; } + + private long pvolumeID_ ; + /** + * int64 pvolumeID = 2; + * @return The pvolumeID. + */ + @java.lang.Override + public long getPvolumeID() { + return pvolumeID_; + } + /** + * int64 pvolumeID = 2; + * @param value The pvolumeID to set. + * @return This builder for chaining. + */ + public Builder setPvolumeID(long value) { + + pvolumeID_ = value; + onChanged(); + return this; + } + /** + * int64 pvolumeID = 2; + * @return This builder for chaining. + */ + public Builder clearPvolumeID() { + + pvolumeID_ = 0L; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -4045,6 +4116,12 @@ public org.opendedup.grpc.SDFSEventOuterClass.SDFSEventResponse getDefaultInstan public interface SDFSEventListRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:org.opendedup.grpc.SDFSEventListRequest) com.google.protobuf.MessageOrBuilder { + + /** + * int64 pvolumeID = 1; + * @return The pvolumeID. + */ + long getPvolumeID(); } /** * Protobuf type {@code org.opendedup.grpc.SDFSEventListRequest} @@ -4091,6 +4168,11 @@ private SDFSEventListRequest( case 0: done = true; break; + case 8: { + + pvolumeID_ = input.readInt64(); + break; + } default: { if (!parseUnknownField( input, unknownFields, extensionRegistry, tag)) { @@ -4123,6 +4205,17 @@ private SDFSEventListRequest( org.opendedup.grpc.SDFSEventOuterClass.SDFSEventListRequest.class, org.opendedup.grpc.SDFSEventOuterClass.SDFSEventListRequest.Builder.class); } + public static final int PVOLUMEID_FIELD_NUMBER = 1; + private long pvolumeID_; + /** + * int64 pvolumeID = 1; + * @return The pvolumeID. + */ + @java.lang.Override + public long getPvolumeID() { + return pvolumeID_; + } + private byte memoizedIsInitialized = -1; @java.lang.Override public final boolean isInitialized() { @@ -4137,6 +4230,9 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (pvolumeID_ != 0L) { + output.writeInt64(1, pvolumeID_); + } unknownFields.writeTo(output); } @@ -4146,6 +4242,10 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; + if (pvolumeID_ != 0L) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(1, pvolumeID_); + } size += unknownFields.getSerializedSize(); memoizedSize = size; return size; @@ -4161,6 +4261,8 @@ public boolean equals(final java.lang.Object obj) { } org.opendedup.grpc.SDFSEventOuterClass.SDFSEventListRequest other = (org.opendedup.grpc.SDFSEventOuterClass.SDFSEventListRequest) obj; + if (getPvolumeID() + != other.getPvolumeID()) return false; if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -4172,6 +4274,9 @@ public int hashCode() { } int hash = 41; hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER; + hash = (53 * hash) + com.google.protobuf.Internal.hashLong( + getPvolumeID()); hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; @@ -4305,6 +4410,8 @@ private void maybeForceBuilderInitialization() { @java.lang.Override public Builder clear() { super.clear(); + pvolumeID_ = 0L; + return this; } @@ -4331,6 +4438,7 @@ public org.opendedup.grpc.SDFSEventOuterClass.SDFSEventListRequest build() { @java.lang.Override public org.opendedup.grpc.SDFSEventOuterClass.SDFSEventListRequest buildPartial() { org.opendedup.grpc.SDFSEventOuterClass.SDFSEventListRequest result = new org.opendedup.grpc.SDFSEventOuterClass.SDFSEventListRequest(this); + result.pvolumeID_ = pvolumeID_; onBuilt(); return result; } @@ -4379,6 +4487,9 @@ public Builder mergeFrom(com.google.protobuf.Message other) { public Builder mergeFrom(org.opendedup.grpc.SDFSEventOuterClass.SDFSEventListRequest other) { if (other == org.opendedup.grpc.SDFSEventOuterClass.SDFSEventListRequest.getDefaultInstance()) return this; + if (other.getPvolumeID() != 0L) { + setPvolumeID(other.getPvolumeID()); + } this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -4407,6 +4518,37 @@ public Builder mergeFrom( } return this; } + + private long pvolumeID_ ; + /** + * int64 pvolumeID = 1; + * @return The pvolumeID. + */ + @java.lang.Override + public long getPvolumeID() { + return pvolumeID_; + } + /** + * int64 pvolumeID = 1; + * @param value The pvolumeID to set. + * @return This builder for chaining. + */ + public Builder setPvolumeID(long value) { + + pvolumeID_ = value; + onChanged(); + return this; + } + /** + * int64 pvolumeID = 1; + * @return This builder for chaining. + */ + public Builder clearPvolumeID() { + + pvolumeID_ = 0L; + onChanged(); + return this; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -5560,24 +5702,25 @@ public org.opendedup.grpc.SDFSEventOuterClass.SDFSEventListResponse getDefaultIn "\030\016 \003(\t\022\017\n\007success\030\017 \001(\010\022A\n\nattributes\030\020 " + "\003(\0132-.org.opendedup.grpc.SDFSEvent.Attri" + "butesEntry\0321\n\017AttributesEntry\022\013\n\003key\030\001 \001" + - "(\t\022\r\n\005value\030\002 \001(\t:\0028\001\" \n\020SDFSEventReques" + - "t\022\014\n\004uuid\030\001 \001(\t\"\203\001\n\021SDFSEventResponse\022\r\n" + + "(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"3\n\020SDFSEventReques" + + "t\022\014\n\004uuid\030\001 \001(\t\022\021\n\tpvolumeID\030\002 \001(\003\"\203\001\n\021S" + + "DFSEventResponse\022\r\n\005error\030\001 \001(\t\0221\n\terror" + + "Code\030\002 \001(\0162\036.org.opendedup.grpc.errorCod" + + "es\022,\n\005event\030\003 \001(\0132\035.org.opendedup.grpc.S" + + "DFSEvent\")\n\024SDFSEventListRequest\022\021\n\tpvol" + + "umeID\030\001 \001(\003\"\210\001\n\025SDFSEventListResponse\022\r\n" + "\005error\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.org.op" + - "endedup.grpc.errorCodes\022,\n\005event\030\003 \001(\0132\035" + - ".org.opendedup.grpc.SDFSEvent\"\026\n\024SDFSEve" + - "ntListRequest\"\210\001\n\025SDFSEventListResponse\022" + - "\r\n\005error\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.org." + - "opendedup.grpc.errorCodes\022-\n\006events\030\003 \003(" + - "\0132\035.org.opendedup.grpc.SDFSEvent2\257\002\n\020SDF" + - "SEventService\022W\n\010GetEvent\022$.org.opendedu" + - "p.grpc.SDFSEventRequest\032%.org.opendedup." + - "grpc.SDFSEventResponse\022a\n\nListEvents\022(.o" + - "rg.opendedup.grpc.SDFSEventListRequest\032)" + - ".org.opendedup.grpc.SDFSEventListRespons" + - "e\022_\n\016SubscribeEvent\022$.org.opendedup.grpc" + - ".SDFSEventRequest\032%.org.opendedup.grpc.S" + - "DFSEventResponse0\001B0Z.github.com/opended" + - "up/sdfs-client-go/sdfs/;sdfsb\006proto3" + "endedup.grpc.errorCodes\022-\n\006events\030\003 \003(\0132" + + "\035.org.opendedup.grpc.SDFSEvent2\257\002\n\020SDFSE" + + "ventService\022W\n\010GetEvent\022$.org.opendedup." + + "grpc.SDFSEventRequest\032%.org.opendedup.gr" + + "pc.SDFSEventResponse\022a\n\nListEvents\022(.org" + + ".opendedup.grpc.SDFSEventListRequest\032).o" + + "rg.opendedup.grpc.SDFSEventListResponse\022" + + "_\n\016SubscribeEvent\022$.org.opendedup.grpc.S" + + "DFSEventRequest\032%.org.opendedup.grpc.SDF" + + "SEventResponse0\001B0Z.github.com/opendedup" + + "/sdfs-client-go/sdfs/;sdfsb\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor .internalBuildGeneratedFileFrom(descriptorData, @@ -5601,7 +5744,7 @@ public org.opendedup.grpc.SDFSEventOuterClass.SDFSEventListResponse getDefaultIn internal_static_org_opendedup_grpc_SDFSEventRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_org_opendedup_grpc_SDFSEventRequest_descriptor, - new java.lang.String[] { "Uuid", }); + new java.lang.String[] { "Uuid", "PvolumeID", }); internal_static_org_opendedup_grpc_SDFSEventResponse_descriptor = getDescriptor().getMessageTypes().get(2); internal_static_org_opendedup_grpc_SDFSEventResponse_fieldAccessorTable = new @@ -5613,7 +5756,7 @@ public org.opendedup.grpc.SDFSEventOuterClass.SDFSEventListResponse getDefaultIn internal_static_org_opendedup_grpc_SDFSEventListRequest_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_org_opendedup_grpc_SDFSEventListRequest_descriptor, - new java.lang.String[] { }); + new java.lang.String[] { "PvolumeID", }); internal_static_org_opendedup_grpc_SDFSEventListResponse_descriptor = getDescriptor().getMessageTypes().get(4); internal_static_org_opendedup_grpc_SDFSEventListResponse_fieldAccessorTable = new diff --git a/src/org/opendedup/grpc/Shutdown.java b/src/org/opendedup/grpc/Shutdown.java index 20daffe19..c41df6b25 100644 --- a/src/org/opendedup/grpc/Shutdown.java +++ b/src/org/opendedup/grpc/Shutdown.java @@ -17,6 +17,12 @@ public static void registerAllExtensions( public interface ShutdownRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:org.opendedup.grpc.ShutdownRequest) com.google.protobuf.MessageOrBuilder { + + /** + * int64 pvolumeID = 1; + * @return The pvolumeID. + */ + long getPvolumeID(); } /** *
@@ -67,6 +73,11 @@ private ShutdownRequest(
             case 0:
               done = true;
               break;
+            case 8: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -99,6 +110,17 @@ private ShutdownRequest(
               org.opendedup.grpc.Shutdown.ShutdownRequest.class, org.opendedup.grpc.Shutdown.ShutdownRequest.Builder.class);
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 1;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 1;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -113,6 +135,9 @@ public final boolean isInitialized() {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(1, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -122,6 +147,10 @@ public int getSerializedSize() {
       if (size != -1) return size;
 
       size = 0;
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(1, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -137,6 +166,8 @@ public boolean equals(final java.lang.Object obj) {
       }
       org.opendedup.grpc.Shutdown.ShutdownRequest other = (org.opendedup.grpc.Shutdown.ShutdownRequest) obj;
 
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -148,6 +179,9 @@ public int hashCode() {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -285,6 +319,8 @@ private void maybeForceBuilderInitialization() {
       @java.lang.Override
       public Builder clear() {
         super.clear();
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -311,6 +347,7 @@ public org.opendedup.grpc.Shutdown.ShutdownRequest build() {
       @java.lang.Override
       public org.opendedup.grpc.Shutdown.ShutdownRequest buildPartial() {
         org.opendedup.grpc.Shutdown.ShutdownRequest result = new org.opendedup.grpc.Shutdown.ShutdownRequest(this);
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -359,6 +396,9 @@ public Builder mergeFrom(com.google.protobuf.Message other) {
 
       public Builder mergeFrom(org.opendedup.grpc.Shutdown.ShutdownRequest other) {
         if (other == org.opendedup.grpc.Shutdown.ShutdownRequest.getDefaultInstance()) return this;
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -387,6 +427,37 @@ public Builder mergeFrom(
         }
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 1;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 1;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 1;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -1135,11 +1206,11 @@ public org.opendedup.grpc.Shutdown.ShutdownResponse getDefaultInstanceForType()
   static {
     java.lang.String[] descriptorData = {
       "\n\016Shutdown.proto\022\022org.opendedup.grpc\032\016Fi" +
-      "leInfo.proto\"\021\n\017ShutdownRequest\"T\n\020Shutd" +
-      "ownResponse\022\r\n\005error\030\001 \001(\t\0221\n\terrorCode\030" +
-      "\004 \001(\0162\036.org.opendedup.grpc.errorCodesB0Z" +
-      ".github.com/opendedup/sdfs-client-go/sdf" +
-      "s/;sdfsb\006proto3"
+      "leInfo.proto\"$\n\017ShutdownRequest\022\021\n\tpvolu" +
+      "meID\030\001 \001(\003\"T\n\020ShutdownResponse\022\r\n\005error\030" +
+      "\001 \001(\t\0221\n\terrorCode\030\004 \001(\0162\036.org.opendedup" +
+      ".grpc.errorCodesB0Z.github.com/opendedup" +
+      "/sdfs-client-go/sdfs/;sdfsb\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
@@ -1151,7 +1222,7 @@ public org.opendedup.grpc.Shutdown.ShutdownResponse getDefaultInstanceForType()
     internal_static_org_opendedup_grpc_ShutdownRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_ShutdownRequest_descriptor,
-        new java.lang.String[] { });
+        new java.lang.String[] { "PvolumeID", });
     internal_static_org_opendedup_grpc_ShutdownResponse_descriptor =
       getDescriptor().getMessageTypes().get(1);
     internal_static_org_opendedup_grpc_ShutdownResponse_fieldAccessorTable = new
diff --git a/src/org/opendedup/grpc/Storage.java b/src/org/opendedup/grpc/Storage.java
index 9e2dc7998..00f895883 100644
--- a/src/org/opendedup/grpc/Storage.java
+++ b/src/org/opendedup/grpc/Storage.java
@@ -274,6 +274,12 @@ public interface CheckHashesRequestOrBuilder extends
      * @return The hashes at the given index.
      */
     com.google.protobuf.ByteString getHashes(int index);
+
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.CheckHashesRequest}
@@ -330,6 +336,11 @@ private CheckHashesRequest(
               hashes_.add(input.readBytes());
               break;
             }
+            case 16: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -392,6 +403,17 @@ public com.google.protobuf.ByteString getHashes(int index) {
       return hashes_.get(index);
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 2;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -409,6 +431,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       for (int i = 0; i < hashes_.size(); i++) {
         output.writeBytes(1, hashes_.get(i));
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(2, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -427,6 +452,10 @@ public int getSerializedSize() {
         size += dataSize;
         size += 1 * getHashesList().size();
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(2, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -444,6 +473,8 @@ public boolean equals(final java.lang.Object obj) {
 
       if (!getHashesList()
           .equals(other.getHashesList())) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -459,6 +490,9 @@ public int hashCode() {
         hash = (37 * hash) + HASHES_FIELD_NUMBER;
         hash = (53 * hash) + getHashesList().hashCode();
       }
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -594,6 +628,8 @@ public Builder clear() {
         super.clear();
         hashes_ = java.util.Collections.emptyList();
         bitField0_ = (bitField0_ & ~0x00000001);
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -626,6 +662,7 @@ public org.opendedup.grpc.Storage.CheckHashesRequest buildPartial() {
           bitField0_ = (bitField0_ & ~0x00000001);
         }
         result.hashes_ = hashes_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -684,6 +721,9 @@ public Builder mergeFrom(org.opendedup.grpc.Storage.CheckHashesRequest other) {
           }
           onChanged();
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -798,6 +838,37 @@ public Builder clearHashes() {
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 2;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -1738,6 +1809,12 @@ public interface MetaDataDedupeFileRequestOrBuilder extends
      */
     com.google.protobuf.ByteString
         getFilePathBytes();
+
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.MetaDataDedupeFileRequest}
@@ -1791,6 +1868,11 @@ private MetaDataDedupeFileRequest(
               filePath_ = s;
               break;
             }
+            case 16: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -1861,6 +1943,17 @@ public java.lang.String getFilePath() {
       }
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 2;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -1878,6 +1971,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (!getFilePathBytes().isEmpty()) {
         com.google.protobuf.GeneratedMessageV3.writeString(output, 1, filePath_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(2, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -1890,6 +1986,10 @@ public int getSerializedSize() {
       if (!getFilePathBytes().isEmpty()) {
         size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, filePath_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(2, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -1907,6 +2007,8 @@ public boolean equals(final java.lang.Object obj) {
 
       if (!getFilePath()
           .equals(other.getFilePath())) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -1920,6 +2022,9 @@ public int hashCode() {
       hash = (19 * hash) + getDescriptor().hashCode();
       hash = (37 * hash) + FILEPATH_FIELD_NUMBER;
       hash = (53 * hash) + getFilePath().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -2055,6 +2160,8 @@ public Builder clear() {
         super.clear();
         filePath_ = "";
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -2082,6 +2189,7 @@ public org.opendedup.grpc.Storage.MetaDataDedupeFileRequest build() {
       public org.opendedup.grpc.Storage.MetaDataDedupeFileRequest buildPartial() {
         org.opendedup.grpc.Storage.MetaDataDedupeFileRequest result = new org.opendedup.grpc.Storage.MetaDataDedupeFileRequest(this);
         result.filePath_ = filePath_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -2134,6 +2242,9 @@ public Builder mergeFrom(org.opendedup.grpc.Storage.MetaDataDedupeFileRequest ot
           filePath_ = other.filePath_;
           onChanged();
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -2238,6 +2349,37 @@ public Builder setFilePathBytes(
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 2;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -2306,6 +2448,12 @@ public interface SparseDedupeFileRequestOrBuilder extends
      */
     com.google.protobuf.ByteString
         getGuidBytes();
+
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.SparseDedupeFileRequest}
@@ -2359,6 +2507,11 @@ private SparseDedupeFileRequest(
               guid_ = s;
               break;
             }
+            case 16: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -2429,6 +2582,17 @@ public java.lang.String getGuid() {
       }
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 2;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -2446,6 +2610,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (!getGuidBytes().isEmpty()) {
         com.google.protobuf.GeneratedMessageV3.writeString(output, 1, guid_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(2, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -2458,6 +2625,10 @@ public int getSerializedSize() {
       if (!getGuidBytes().isEmpty()) {
         size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, guid_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(2, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -2475,6 +2646,8 @@ public boolean equals(final java.lang.Object obj) {
 
       if (!getGuid()
           .equals(other.getGuid())) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -2488,6 +2661,9 @@ public int hashCode() {
       hash = (19 * hash) + getDescriptor().hashCode();
       hash = (37 * hash) + GUID_FIELD_NUMBER;
       hash = (53 * hash) + getGuid().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -2623,6 +2799,8 @@ public Builder clear() {
         super.clear();
         guid_ = "";
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -2650,6 +2828,7 @@ public org.opendedup.grpc.Storage.SparseDedupeFileRequest build() {
       public org.opendedup.grpc.Storage.SparseDedupeFileRequest buildPartial() {
         org.opendedup.grpc.Storage.SparseDedupeFileRequest result = new org.opendedup.grpc.Storage.SparseDedupeFileRequest(this);
         result.guid_ = guid_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -2702,6 +2881,9 @@ public Builder mergeFrom(org.opendedup.grpc.Storage.SparseDedupeFileRequest othe
           guid_ = other.guid_;
           onChanged();
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -2806,6 +2988,37 @@ public Builder setGuidBytes(
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 2;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -3693,6 +3906,18 @@ public interface ChunkEntryOrBuilder extends
      * @return The data.
      */
     com.google.protobuf.ByteString getData();
+
+    /**
+     * bool compressed = 3;
+     * @return The compressed.
+     */
+    boolean getCompressed();
+
+    /**
+     * int32 compressedLength = 4;
+     * @return The compressedLength.
+     */
+    int getCompressedLength();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.ChunkEntry}
@@ -3751,6 +3976,16 @@ private ChunkEntry(
               data_ = input.readBytes();
               break;
             }
+            case 24: {
+
+              compressed_ = input.readBool();
+              break;
+            }
+            case 32: {
+
+              compressedLength_ = input.readInt32();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -3805,6 +4040,28 @@ public com.google.protobuf.ByteString getData() {
       return data_;
     }
 
+    public static final int COMPRESSED_FIELD_NUMBER = 3;
+    private boolean compressed_;
+    /**
+     * bool compressed = 3;
+     * @return The compressed.
+     */
+    @java.lang.Override
+    public boolean getCompressed() {
+      return compressed_;
+    }
+
+    public static final int COMPRESSEDLENGTH_FIELD_NUMBER = 4;
+    private int compressedLength_;
+    /**
+     * int32 compressedLength = 4;
+     * @return The compressedLength.
+     */
+    @java.lang.Override
+    public int getCompressedLength() {
+      return compressedLength_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -3825,6 +4082,12 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (!data_.isEmpty()) {
         output.writeBytes(2, data_);
       }
+      if (compressed_ != false) {
+        output.writeBool(3, compressed_);
+      }
+      if (compressedLength_ != 0) {
+        output.writeInt32(4, compressedLength_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -3842,6 +4105,14 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeBytesSize(2, data_);
       }
+      if (compressed_ != false) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(3, compressed_);
+      }
+      if (compressedLength_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(4, compressedLength_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -3861,6 +4132,10 @@ public boolean equals(final java.lang.Object obj) {
           .equals(other.getHash())) return false;
       if (!getData()
           .equals(other.getData())) return false;
+      if (getCompressed()
+          != other.getCompressed()) return false;
+      if (getCompressedLength()
+          != other.getCompressedLength()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -3876,6 +4151,11 @@ public int hashCode() {
       hash = (53 * hash) + getHash().hashCode();
       hash = (37 * hash) + DATA_FIELD_NUMBER;
       hash = (53 * hash) + getData().hashCode();
+      hash = (37 * hash) + COMPRESSED_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getCompressed());
+      hash = (37 * hash) + COMPRESSEDLENGTH_FIELD_NUMBER;
+      hash = (53 * hash) + getCompressedLength();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -4013,6 +4293,10 @@ public Builder clear() {
 
         data_ = com.google.protobuf.ByteString.EMPTY;
 
+        compressed_ = false;
+
+        compressedLength_ = 0;
+
         return this;
       }
 
@@ -4041,6 +4325,8 @@ public org.opendedup.grpc.Storage.ChunkEntry buildPartial() {
         org.opendedup.grpc.Storage.ChunkEntry result = new org.opendedup.grpc.Storage.ChunkEntry(this);
         result.hash_ = hash_;
         result.data_ = data_;
+        result.compressed_ = compressed_;
+        result.compressedLength_ = compressedLength_;
         onBuilt();
         return result;
       }
@@ -4095,6 +4381,12 @@ public Builder mergeFrom(org.opendedup.grpc.Storage.ChunkEntry other) {
         if (other.getData() != com.google.protobuf.ByteString.EMPTY) {
           setData(other.getData());
         }
+        if (other.getCompressed() != false) {
+          setCompressed(other.getCompressed());
+        }
+        if (other.getCompressedLength() != 0) {
+          setCompressedLength(other.getCompressedLength());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -4191,6 +4483,68 @@ public Builder clearData() {
         onChanged();
         return this;
       }
+
+      private boolean compressed_ ;
+      /**
+       * bool compressed = 3;
+       * @return The compressed.
+       */
+      @java.lang.Override
+      public boolean getCompressed() {
+        return compressed_;
+      }
+      /**
+       * bool compressed = 3;
+       * @param value The compressed to set.
+       * @return This builder for chaining.
+       */
+      public Builder setCompressed(boolean value) {
+        
+        compressed_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * bool compressed = 3;
+       * @return This builder for chaining.
+       */
+      public Builder clearCompressed() {
+        
+        compressed_ = false;
+        onChanged();
+        return this;
+      }
+
+      private int compressedLength_ ;
+      /**
+       * int32 compressedLength = 4;
+       * @return The compressedLength.
+       */
+      @java.lang.Override
+      public int getCompressedLength() {
+        return compressedLength_;
+      }
+      /**
+       * int32 compressedLength = 4;
+       * @param value The compressedLength to set.
+       * @return This builder for chaining.
+       */
+      public Builder setCompressedLength(int value) {
+        
+        compressedLength_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int32 compressedLength = 4;
+       * @return This builder for chaining.
+       */
+      public Builder clearCompressedLength() {
+        
+        compressedLength_ = 0;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -4277,6 +4631,12 @@ org.opendedup.grpc.Storage.ChunkEntryOrBuilder getChunksOrBuilder(
      * @return The fileHandle.
      */
     long getFileHandle();
+
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.WriteChunksRequest}
@@ -4339,6 +4699,11 @@ private WriteChunksRequest(
               fileHandle_ = input.readInt64();
               break;
             }
+            case 24: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -4425,6 +4790,17 @@ public long getFileHandle() {
       return fileHandle_;
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 3;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -4445,6 +4821,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (fileHandle_ != 0L) {
         output.writeInt64(2, fileHandle_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(3, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -4462,6 +4841,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeInt64Size(2, fileHandle_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(3, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -4481,6 +4864,8 @@ public boolean equals(final java.lang.Object obj) {
           .equals(other.getChunksList())) return false;
       if (getFileHandle()
           != other.getFileHandle()) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -4499,6 +4884,9 @@ public int hashCode() {
       hash = (37 * hash) + FILEHANDLE_FIELD_NUMBER;
       hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
           getFileHandle());
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -4641,6 +5029,8 @@ public Builder clear() {
         }
         fileHandle_ = 0L;
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -4678,6 +5068,7 @@ public org.opendedup.grpc.Storage.WriteChunksRequest buildPartial() {
           result.chunks_ = chunksBuilder_.build();
         }
         result.fileHandle_ = fileHandle_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -4755,6 +5146,9 @@ public Builder mergeFrom(org.opendedup.grpc.Storage.WriteChunksRequest other) {
         if (other.getFileHandle() != 0L) {
           setFileHandle(other.getFileHandle());
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -5055,6 +5449,37 @@ public Builder clearFileHandle() {
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 3;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -6185,6 +6610,12 @@ public interface ReadChunksRequestOrBuilder extends
      */
     org.opendedup.grpc.Storage.ChunkEntryOrBuilder getChunksOrBuilder(
         int index);
+
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.ReadChunksRequest}
@@ -6242,6 +6673,11 @@ private ReadChunksRequest(
                   input.readMessage(org.opendedup.grpc.Storage.ChunkEntry.parser(), extensionRegistry));
               break;
             }
+            case 16: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -6317,6 +6753,17 @@ public org.opendedup.grpc.Storage.ChunkEntryOrBuilder getChunksOrBuilder(
       return chunks_.get(index);
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 2;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -6334,6 +6781,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       for (int i = 0; i < chunks_.size(); i++) {
         output.writeMessage(1, chunks_.get(i));
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(2, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -6347,6 +6797,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(1, chunks_.get(i));
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(2, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -6364,6 +6818,8 @@ public boolean equals(final java.lang.Object obj) {
 
       if (!getChunksList()
           .equals(other.getChunksList())) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -6379,6 +6835,9 @@ public int hashCode() {
         hash = (37 * hash) + CHUNKS_FIELD_NUMBER;
         hash = (53 * hash) + getChunksList().hashCode();
       }
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -6519,6 +6978,8 @@ public Builder clear() {
         } else {
           chunksBuilder_.clear();
         }
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -6555,6 +7016,7 @@ public org.opendedup.grpc.Storage.ReadChunksRequest buildPartial() {
         } else {
           result.chunks_ = chunksBuilder_.build();
         }
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -6629,6 +7091,9 @@ public Builder mergeFrom(org.opendedup.grpc.Storage.ReadChunksRequest other) {
             }
           }
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -6898,24 +7363,55 @@ public org.opendedup.grpc.Storage.ChunkEntry.Builder addChunksBuilder(
         }
         return chunksBuilder_;
       }
-      @java.lang.Override
-      public final Builder setUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.setUnknownFields(unknownFields);
-      }
 
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 2;
+       * @return The pvolumeID.
+       */
       @java.lang.Override
-      public final Builder mergeUnknownFields(
-          final com.google.protobuf.UnknownFieldSet unknownFields) {
-        return super.mergeUnknownFields(unknownFields);
+      public long getPvolumeID() {
+        return pvolumeID_;
       }
-
-
-      // @@protoc_insertion_point(builder_scope:org.opendedup.grpc.ReadChunksRequest)
-    }
-
-    // @@protoc_insertion_point(class_scope:org.opendedup.grpc.ReadChunksRequest)
-    private static final org.opendedup.grpc.Storage.ReadChunksRequest DEFAULT_INSTANCE;
+      /**
+       * int64 pvolumeID = 2;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:org.opendedup.grpc.ReadChunksRequest)
+    }
+
+    // @@protoc_insertion_point(class_scope:org.opendedup.grpc.ReadChunksRequest)
+    private static final org.opendedup.grpc.Storage.ReadChunksRequest DEFAULT_INSTANCE;
     static {
       DEFAULT_INSTANCE = new org.opendedup.grpc.Storage.ReadChunksRequest();
     }
@@ -7794,6 +8290,12 @@ org.opendedup.grpc.Storage.ChunkEntryOrBuilder getChunksOrBuilder(
      * @return The errorCode.
      */
     org.opendedup.grpc.FileInfo.errorCodes getErrorCode();
+
+    /**
+     * int64 pvolumeID = 4;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.HashingInfoRequest}
@@ -7865,6 +8367,11 @@ private HashingInfoRequest(
               errorCode_ = rawValue;
               break;
             }
+            case 32: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -7997,6 +8504,17 @@ public java.lang.String getError() {
       return result == null ? org.opendedup.grpc.FileInfo.errorCodes.UNRECOGNIZED : result;
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 4;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 4;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -8020,6 +8538,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (errorCode_ != org.opendedup.grpc.FileInfo.errorCodes.NOERR.getNumber()) {
         output.writeEnum(3, errorCode_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(4, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -8040,6 +8561,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeEnumSize(3, errorCode_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(4, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -8060,6 +8585,8 @@ public boolean equals(final java.lang.Object obj) {
       if (!getError()
           .equals(other.getError())) return false;
       if (errorCode_ != other.errorCode_) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -8079,6 +8606,9 @@ public int hashCode() {
       hash = (53 * hash) + getError().hashCode();
       hash = (37 * hash) + ERRORCODE_FIELD_NUMBER;
       hash = (53 * hash) + errorCode_;
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -8223,6 +8753,8 @@ public Builder clear() {
 
         errorCode_ = 0;
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -8261,6 +8793,7 @@ public org.opendedup.grpc.Storage.HashingInfoRequest buildPartial() {
         }
         result.error_ = error_;
         result.errorCode_ = errorCode_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -8342,6 +8875,9 @@ public Builder mergeFrom(org.opendedup.grpc.Storage.HashingInfoRequest other) {
         if (other.errorCode_ != 0) {
           setErrorCodeValue(other.getErrorCodeValue());
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -8741,6 +9277,37 @@ public Builder clearErrorCode() {
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 4;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 4;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 4;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -9875,6 +10442,12 @@ org.opendedup.grpc.Storage.HashLocPairP getArOrThrow(
      * @return The prevdoop.
      */
     int getPrevdoop();
+
+    /**
+     * int32 compressedLength = 8;
+     * @return The compressedLength.
+     */
+    int getCompressedLength();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.SparseDataChunkP}
@@ -9984,6 +10557,11 @@ private SparseDataChunkP(
               prevdoop_ = input.readInt32();
               break;
             }
+            case 64: {
+
+              compressedLength_ = input.readInt32();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -10225,6 +10803,17 @@ public int getPrevdoop() {
       return prevdoop_;
     }
 
+    public static final int COMPRESSEDLENGTH_FIELD_NUMBER = 8;
+    private int compressedLength_;
+    /**
+     * int32 compressedLength = 8;
+     * @return The compressedLength.
+     */
+    @java.lang.Override
+    public int getCompressedLength() {
+      return compressedLength_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -10268,6 +10857,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (prevdoop_ != 0) {
         output.writeInt32(7, prevdoop_);
       }
+      if (compressedLength_ != 0) {
+        output.writeInt32(8, compressedLength_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -10319,6 +10911,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeInt32Size(7, prevdoop_);
       }
+      if (compressedLength_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(8, compressedLength_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -10347,6 +10943,8 @@ public boolean equals(final java.lang.Object obj) {
           != other.getDoop()) return false;
       if (getPrevdoop()
           != other.getPrevdoop()) return false;
+      if (getCompressedLength()
+          != other.getCompressedLength()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -10377,6 +10975,8 @@ public int hashCode() {
       hash = (53 * hash) + getDoop();
       hash = (37 * hash) + PREVDOOP_FIELD_NUMBER;
       hash = (53 * hash) + getPrevdoop();
+      hash = (37 * hash) + COMPRESSEDLENGTH_FIELD_NUMBER;
+      hash = (53 * hash) + getCompressedLength();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -10545,6 +11145,8 @@ public Builder clear() {
 
         prevdoop_ = 0;
 
+        compressedLength_ = 0;
+
         return this;
       }
 
@@ -10584,6 +11186,7 @@ public org.opendedup.grpc.Storage.SparseDataChunkP buildPartial() {
         result.ar_.makeImmutable();
         result.doop_ = doop_;
         result.prevdoop_ = prevdoop_;
+        result.compressedLength_ = compressedLength_;
         onBuilt();
         return result;
       }
@@ -10659,6 +11262,9 @@ public Builder mergeFrom(org.opendedup.grpc.Storage.SparseDataChunkP other) {
         if (other.getPrevdoop() != 0) {
           setPrevdoop(other.getPrevdoop());
         }
+        if (other.getCompressedLength() != 0) {
+          setCompressedLength(other.getCompressedLength());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -11111,6 +11717,37 @@ public Builder clearPrevdoop() {
         onChanged();
         return this;
       }
+
+      private int compressedLength_ ;
+      /**
+       * int32 compressedLength = 8;
+       * @return The compressedLength.
+       */
+      @java.lang.Override
+      public int getCompressedLength() {
+        return compressedLength_;
+      }
+      /**
+       * int32 compressedLength = 8;
+       * @param value The compressedLength to set.
+       * @return This builder for chaining.
+       */
+      public Builder setCompressedLength(int value) {
+        
+        compressedLength_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int32 compressedLength = 8;
+       * @return This builder for chaining.
+       */
+      public Builder clearCompressedLength() {
+        
+        compressedLength_ = 0;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -11194,6 +11831,30 @@ public interface SparseDedupeChunkWriteRequestOrBuilder extends
      * @return The fileLocation.
      */
     long getFileLocation();
+
+    /**
+     * int64 pvolumeID = 4;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
+
+    /**
+     * bool compressed = 5;
+     * @return The compressed.
+     */
+    boolean getCompressed();
+
+    /**
+     * bytes compressedChunk = 6;
+     * @return The compressedChunk.
+     */
+    com.google.protobuf.ByteString getCompressedChunk();
+
+    /**
+     * int32 uncompressedLen = 7;
+     * @return The uncompressedLen.
+     */
+    int getUncompressedLen();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.SparseDedupeChunkWriteRequest}
@@ -11208,6 +11869,7 @@ private SparseDedupeChunkWriteRequest(com.google.protobuf.GeneratedMessageV3.Bui
       super(builder);
     }
     private SparseDedupeChunkWriteRequest() {
+      compressedChunk_ = com.google.protobuf.ByteString.EMPTY;
     }
 
     @java.lang.Override
@@ -11263,6 +11925,26 @@ private SparseDedupeChunkWriteRequest(
               fileLocation_ = input.readInt64();
               break;
             }
+            case 32: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
+            case 40: {
+
+              compressed_ = input.readBool();
+              break;
+            }
+            case 50: {
+
+              compressedChunk_ = input.readBytes();
+              break;
+            }
+            case 56: {
+
+              uncompressedLen_ = input.readInt32();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -11343,6 +12025,50 @@ public long getFileLocation() {
       return fileLocation_;
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 4;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 4;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
+    public static final int COMPRESSED_FIELD_NUMBER = 5;
+    private boolean compressed_;
+    /**
+     * bool compressed = 5;
+     * @return The compressed.
+     */
+    @java.lang.Override
+    public boolean getCompressed() {
+      return compressed_;
+    }
+
+    public static final int COMPRESSEDCHUNK_FIELD_NUMBER = 6;
+    private com.google.protobuf.ByteString compressedChunk_;
+    /**
+     * bytes compressedChunk = 6;
+     * @return The compressedChunk.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString getCompressedChunk() {
+      return compressedChunk_;
+    }
+
+    public static final int UNCOMPRESSEDLEN_FIELD_NUMBER = 7;
+    private int uncompressedLen_;
+    /**
+     * int32 uncompressedLen = 7;
+     * @return The uncompressedLen.
+     */
+    @java.lang.Override
+    public int getUncompressedLen() {
+      return uncompressedLen_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -11366,6 +12092,18 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (fileLocation_ != 0L) {
         output.writeInt64(3, fileLocation_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(4, pvolumeID_);
+      }
+      if (compressed_ != false) {
+        output.writeBool(5, compressed_);
+      }
+      if (!compressedChunk_.isEmpty()) {
+        output.writeBytes(6, compressedChunk_);
+      }
+      if (uncompressedLen_ != 0) {
+        output.writeInt32(7, uncompressedLen_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -11387,6 +12125,22 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeInt64Size(3, fileLocation_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(4, pvolumeID_);
+      }
+      if (compressed_ != false) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(5, compressed_);
+      }
+      if (!compressedChunk_.isEmpty()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBytesSize(6, compressedChunk_);
+      }
+      if (uncompressedLen_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(7, uncompressedLen_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -11411,6 +12165,14 @@ public boolean equals(final java.lang.Object obj) {
           != other.getFileHandle()) return false;
       if (getFileLocation()
           != other.getFileLocation()) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
+      if (getCompressed()
+          != other.getCompressed()) return false;
+      if (!getCompressedChunk()
+          .equals(other.getCompressedChunk())) return false;
+      if (getUncompressedLen()
+          != other.getUncompressedLen()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -11432,6 +12194,16 @@ public int hashCode() {
       hash = (37 * hash) + FILELOCATION_FIELD_NUMBER;
       hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
           getFileLocation());
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
+      hash = (37 * hash) + COMPRESSED_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getCompressed());
+      hash = (37 * hash) + COMPRESSEDCHUNK_FIELD_NUMBER;
+      hash = (53 * hash) + getCompressedChunk().hashCode();
+      hash = (37 * hash) + UNCOMPRESSEDLEN_FIELD_NUMBER;
+      hash = (53 * hash) + getUncompressedLen();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -11575,6 +12347,14 @@ public Builder clear() {
 
         fileLocation_ = 0L;
 
+        pvolumeID_ = 0L;
+
+        compressed_ = false;
+
+        compressedChunk_ = com.google.protobuf.ByteString.EMPTY;
+
+        uncompressedLen_ = 0;
+
         return this;
       }
 
@@ -11608,6 +12388,10 @@ public org.opendedup.grpc.Storage.SparseDedupeChunkWriteRequest buildPartial() {
         }
         result.fileHandle_ = fileHandle_;
         result.fileLocation_ = fileLocation_;
+        result.pvolumeID_ = pvolumeID_;
+        result.compressed_ = compressed_;
+        result.compressedChunk_ = compressedChunk_;
+        result.uncompressedLen_ = uncompressedLen_;
         onBuilt();
         return result;
       }
@@ -11665,6 +12449,18 @@ public Builder mergeFrom(org.opendedup.grpc.Storage.SparseDedupeChunkWriteReques
         if (other.getFileLocation() != 0L) {
           setFileLocation(other.getFileLocation());
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
+        if (other.getCompressed() != false) {
+          setCompressed(other.getCompressed());
+        }
+        if (other.getCompressedChunk() != com.google.protobuf.ByteString.EMPTY) {
+          setCompressedChunk(other.getCompressedChunk());
+        }
+        if (other.getUncompressedLen() != 0) {
+          setUncompressedLen(other.getUncompressedLen());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -11874,6 +12670,133 @@ public Builder clearFileLocation() {
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 4;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 4;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 4;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
+
+      private boolean compressed_ ;
+      /**
+       * bool compressed = 5;
+       * @return The compressed.
+       */
+      @java.lang.Override
+      public boolean getCompressed() {
+        return compressed_;
+      }
+      /**
+       * bool compressed = 5;
+       * @param value The compressed to set.
+       * @return This builder for chaining.
+       */
+      public Builder setCompressed(boolean value) {
+        
+        compressed_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * bool compressed = 5;
+       * @return This builder for chaining.
+       */
+      public Builder clearCompressed() {
+        
+        compressed_ = false;
+        onChanged();
+        return this;
+      }
+
+      private com.google.protobuf.ByteString compressedChunk_ = com.google.protobuf.ByteString.EMPTY;
+      /**
+       * bytes compressedChunk = 6;
+       * @return The compressedChunk.
+       */
+      @java.lang.Override
+      public com.google.protobuf.ByteString getCompressedChunk() {
+        return compressedChunk_;
+      }
+      /**
+       * bytes compressedChunk = 6;
+       * @param value The compressedChunk to set.
+       * @return This builder for chaining.
+       */
+      public Builder setCompressedChunk(com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        compressedChunk_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * bytes compressedChunk = 6;
+       * @return This builder for chaining.
+       */
+      public Builder clearCompressedChunk() {
+        
+        compressedChunk_ = getDefaultInstance().getCompressedChunk();
+        onChanged();
+        return this;
+      }
+
+      private int uncompressedLen_ ;
+      /**
+       * int32 uncompressedLen = 7;
+       * @return The uncompressedLen.
+       */
+      @java.lang.Override
+      public int getUncompressedLen() {
+        return uncompressedLen_;
+      }
+      /**
+       * int32 uncompressedLen = 7;
+       * @param value The uncompressedLen to set.
+       * @return This builder for chaining.
+       */
+      public Builder setUncompressedLen(int value) {
+        
+        uncompressedLen_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int32 uncompressedLen = 7;
+       * @return This builder for chaining.
+       */
+      public Builder clearUncompressedLen() {
+        
+        uncompressedLen_ = 0;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -11953,9 +12876,33 @@ public interface SparseDedupeChunkWriteResponseOrBuilder extends
      * @return The errorCode.
      */
     org.opendedup.grpc.FileInfo.errorCodes getErrorCode();
-  }
-  /**
-   * Protobuf type {@code org.opendedup.grpc.SparseDedupeChunkWriteResponse}
+
+    /**
+     * repeated .org.opendedup.grpc.HashLocPairP missedAr = 3;
+     */
+    java.util.List 
+        getMissedArList();
+    /**
+     * repeated .org.opendedup.grpc.HashLocPairP missedAr = 3;
+     */
+    org.opendedup.grpc.Storage.HashLocPairP getMissedAr(int index);
+    /**
+     * repeated .org.opendedup.grpc.HashLocPairP missedAr = 3;
+     */
+    int getMissedArCount();
+    /**
+     * repeated .org.opendedup.grpc.HashLocPairP missedAr = 3;
+     */
+    java.util.List 
+        getMissedArOrBuilderList();
+    /**
+     * repeated .org.opendedup.grpc.HashLocPairP missedAr = 3;
+     */
+    org.opendedup.grpc.Storage.HashLocPairPOrBuilder getMissedArOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code org.opendedup.grpc.SparseDedupeChunkWriteResponse}
    */
   public static final class SparseDedupeChunkWriteResponse extends
       com.google.protobuf.GeneratedMessageV3 implements
@@ -11969,6 +12916,7 @@ private SparseDedupeChunkWriteResponse(com.google.protobuf.GeneratedMessageV3.Bu
     private SparseDedupeChunkWriteResponse() {
       error_ = "";
       errorCode_ = 0;
+      missedAr_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
@@ -11991,6 +12939,7 @@ private SparseDedupeChunkWriteResponse(
       if (extensionRegistry == null) {
         throw new java.lang.NullPointerException();
       }
+      int mutable_bitField0_ = 0;
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
       try {
@@ -12013,6 +12962,15 @@ private SparseDedupeChunkWriteResponse(
               errorCode_ = rawValue;
               break;
             }
+            case 26: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                missedAr_ = new java.util.ArrayList();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              missedAr_.add(
+                  input.readMessage(org.opendedup.grpc.Storage.HashLocPairP.parser(), extensionRegistry));
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -12028,6 +12986,9 @@ private SparseDedupeChunkWriteResponse(
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          missedAr_ = java.util.Collections.unmodifiableList(missedAr_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
@@ -12102,6 +13063,46 @@ public java.lang.String getError() {
       return result == null ? org.opendedup.grpc.FileInfo.errorCodes.UNRECOGNIZED : result;
     }
 
+    public static final int MISSEDAR_FIELD_NUMBER = 3;
+    private java.util.List missedAr_;
+    /**
+     * repeated .org.opendedup.grpc.HashLocPairP missedAr = 3;
+     */
+    @java.lang.Override
+    public java.util.List getMissedArList() {
+      return missedAr_;
+    }
+    /**
+     * repeated .org.opendedup.grpc.HashLocPairP missedAr = 3;
+     */
+    @java.lang.Override
+    public java.util.List 
+        getMissedArOrBuilderList() {
+      return missedAr_;
+    }
+    /**
+     * repeated .org.opendedup.grpc.HashLocPairP missedAr = 3;
+     */
+    @java.lang.Override
+    public int getMissedArCount() {
+      return missedAr_.size();
+    }
+    /**
+     * repeated .org.opendedup.grpc.HashLocPairP missedAr = 3;
+     */
+    @java.lang.Override
+    public org.opendedup.grpc.Storage.HashLocPairP getMissedAr(int index) {
+      return missedAr_.get(index);
+    }
+    /**
+     * repeated .org.opendedup.grpc.HashLocPairP missedAr = 3;
+     */
+    @java.lang.Override
+    public org.opendedup.grpc.Storage.HashLocPairPOrBuilder getMissedArOrBuilder(
+        int index) {
+      return missedAr_.get(index);
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -12122,6 +13123,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (errorCode_ != org.opendedup.grpc.FileInfo.errorCodes.NOERR.getNumber()) {
         output.writeEnum(2, errorCode_);
       }
+      for (int i = 0; i < missedAr_.size(); i++) {
+        output.writeMessage(3, missedAr_.get(i));
+      }
       unknownFields.writeTo(output);
     }
 
@@ -12138,6 +13142,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeEnumSize(2, errorCode_);
       }
+      for (int i = 0; i < missedAr_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, missedAr_.get(i));
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -12156,6 +13164,8 @@ public boolean equals(final java.lang.Object obj) {
       if (!getError()
           .equals(other.getError())) return false;
       if (errorCode_ != other.errorCode_) return false;
+      if (!getMissedArList()
+          .equals(other.getMissedArList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -12171,6 +13181,10 @@ public int hashCode() {
       hash = (53 * hash) + getError().hashCode();
       hash = (37 * hash) + ERRORCODE_FIELD_NUMBER;
       hash = (53 * hash) + errorCode_;
+      if (getMissedArCount() > 0) {
+        hash = (37 * hash) + MISSEDAR_FIELD_NUMBER;
+        hash = (53 * hash) + getMissedArList().hashCode();
+      }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -12299,6 +13313,7 @@ private Builder(
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getMissedArFieldBuilder();
         }
       }
       @java.lang.Override
@@ -12308,6 +13323,12 @@ public Builder clear() {
 
         errorCode_ = 0;
 
+        if (missedArBuilder_ == null) {
+          missedAr_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          missedArBuilder_.clear();
+        }
         return this;
       }
 
@@ -12334,8 +13355,18 @@ public org.opendedup.grpc.Storage.SparseDedupeChunkWriteResponse build() {
       @java.lang.Override
       public org.opendedup.grpc.Storage.SparseDedupeChunkWriteResponse buildPartial() {
         org.opendedup.grpc.Storage.SparseDedupeChunkWriteResponse result = new org.opendedup.grpc.Storage.SparseDedupeChunkWriteResponse(this);
+        int from_bitField0_ = bitField0_;
         result.error_ = error_;
         result.errorCode_ = errorCode_;
+        if (missedArBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            missedAr_ = java.util.Collections.unmodifiableList(missedAr_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.missedAr_ = missedAr_;
+        } else {
+          result.missedAr_ = missedArBuilder_.build();
+        }
         onBuilt();
         return result;
       }
@@ -12391,6 +13422,32 @@ public Builder mergeFrom(org.opendedup.grpc.Storage.SparseDedupeChunkWriteRespon
         if (other.errorCode_ != 0) {
           setErrorCodeValue(other.getErrorCodeValue());
         }
+        if (missedArBuilder_ == null) {
+          if (!other.missedAr_.isEmpty()) {
+            if (missedAr_.isEmpty()) {
+              missedAr_ = other.missedAr_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureMissedArIsMutable();
+              missedAr_.addAll(other.missedAr_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.missedAr_.isEmpty()) {
+            if (missedArBuilder_.isEmpty()) {
+              missedArBuilder_.dispose();
+              missedArBuilder_ = null;
+              missedAr_ = other.missedAr_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              missedArBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getMissedArFieldBuilder() : null;
+            } else {
+              missedArBuilder_.addAllMessages(other.missedAr_);
+            }
+          }
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -12419,6 +13476,7 @@ public Builder mergeFrom(
         }
         return this;
       }
+      private int bitField0_;
 
       private java.lang.Object error_ = "";
       /**
@@ -12549,6 +13607,246 @@ public Builder clearErrorCode() {
         onChanged();
         return this;
       }
+
+      private java.util.List missedAr_ =
+        java.util.Collections.emptyList();
+      private void ensureMissedArIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          missedAr_ = new java.util.ArrayList(missedAr_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          org.opendedup.grpc.Storage.HashLocPairP, org.opendedup.grpc.Storage.HashLocPairP.Builder, org.opendedup.grpc.Storage.HashLocPairPOrBuilder> missedArBuilder_;
+
+      /**
+       * repeated .org.opendedup.grpc.HashLocPairP missedAr = 3;
+       */
+      public java.util.List getMissedArList() {
+        if (missedArBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(missedAr_);
+        } else {
+          return missedArBuilder_.getMessageList();
+        }
+      }
+      /**
+       * repeated .org.opendedup.grpc.HashLocPairP missedAr = 3;
+       */
+      public int getMissedArCount() {
+        if (missedArBuilder_ == null) {
+          return missedAr_.size();
+        } else {
+          return missedArBuilder_.getCount();
+        }
+      }
+      /**
+       * repeated .org.opendedup.grpc.HashLocPairP missedAr = 3;
+       */
+      public org.opendedup.grpc.Storage.HashLocPairP getMissedAr(int index) {
+        if (missedArBuilder_ == null) {
+          return missedAr_.get(index);
+        } else {
+          return missedArBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * repeated .org.opendedup.grpc.HashLocPairP missedAr = 3;
+       */
+      public Builder setMissedAr(
+          int index, org.opendedup.grpc.Storage.HashLocPairP value) {
+        if (missedArBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureMissedArIsMutable();
+          missedAr_.set(index, value);
+          onChanged();
+        } else {
+          missedArBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * repeated .org.opendedup.grpc.HashLocPairP missedAr = 3;
+       */
+      public Builder setMissedAr(
+          int index, org.opendedup.grpc.Storage.HashLocPairP.Builder builderForValue) {
+        if (missedArBuilder_ == null) {
+          ensureMissedArIsMutable();
+          missedAr_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          missedArBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * repeated .org.opendedup.grpc.HashLocPairP missedAr = 3;
+       */
+      public Builder addMissedAr(org.opendedup.grpc.Storage.HashLocPairP value) {
+        if (missedArBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureMissedArIsMutable();
+          missedAr_.add(value);
+          onChanged();
+        } else {
+          missedArBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * repeated .org.opendedup.grpc.HashLocPairP missedAr = 3;
+       */
+      public Builder addMissedAr(
+          int index, org.opendedup.grpc.Storage.HashLocPairP value) {
+        if (missedArBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureMissedArIsMutable();
+          missedAr_.add(index, value);
+          onChanged();
+        } else {
+          missedArBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * repeated .org.opendedup.grpc.HashLocPairP missedAr = 3;
+       */
+      public Builder addMissedAr(
+          org.opendedup.grpc.Storage.HashLocPairP.Builder builderForValue) {
+        if (missedArBuilder_ == null) {
+          ensureMissedArIsMutable();
+          missedAr_.add(builderForValue.build());
+          onChanged();
+        } else {
+          missedArBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * repeated .org.opendedup.grpc.HashLocPairP missedAr = 3;
+       */
+      public Builder addMissedAr(
+          int index, org.opendedup.grpc.Storage.HashLocPairP.Builder builderForValue) {
+        if (missedArBuilder_ == null) {
+          ensureMissedArIsMutable();
+          missedAr_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          missedArBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * repeated .org.opendedup.grpc.HashLocPairP missedAr = 3;
+       */
+      public Builder addAllMissedAr(
+          java.lang.Iterable values) {
+        if (missedArBuilder_ == null) {
+          ensureMissedArIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, missedAr_);
+          onChanged();
+        } else {
+          missedArBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * repeated .org.opendedup.grpc.HashLocPairP missedAr = 3;
+       */
+      public Builder clearMissedAr() {
+        if (missedArBuilder_ == null) {
+          missedAr_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          missedArBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * repeated .org.opendedup.grpc.HashLocPairP missedAr = 3;
+       */
+      public Builder removeMissedAr(int index) {
+        if (missedArBuilder_ == null) {
+          ensureMissedArIsMutable();
+          missedAr_.remove(index);
+          onChanged();
+        } else {
+          missedArBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * repeated .org.opendedup.grpc.HashLocPairP missedAr = 3;
+       */
+      public org.opendedup.grpc.Storage.HashLocPairP.Builder getMissedArBuilder(
+          int index) {
+        return getMissedArFieldBuilder().getBuilder(index);
+      }
+      /**
+       * repeated .org.opendedup.grpc.HashLocPairP missedAr = 3;
+       */
+      public org.opendedup.grpc.Storage.HashLocPairPOrBuilder getMissedArOrBuilder(
+          int index) {
+        if (missedArBuilder_ == null) {
+          return missedAr_.get(index);  } else {
+          return missedArBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * repeated .org.opendedup.grpc.HashLocPairP missedAr = 3;
+       */
+      public java.util.List 
+           getMissedArOrBuilderList() {
+        if (missedArBuilder_ != null) {
+          return missedArBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(missedAr_);
+        }
+      }
+      /**
+       * repeated .org.opendedup.grpc.HashLocPairP missedAr = 3;
+       */
+      public org.opendedup.grpc.Storage.HashLocPairP.Builder addMissedArBuilder() {
+        return getMissedArFieldBuilder().addBuilder(
+            org.opendedup.grpc.Storage.HashLocPairP.getDefaultInstance());
+      }
+      /**
+       * repeated .org.opendedup.grpc.HashLocPairP missedAr = 3;
+       */
+      public org.opendedup.grpc.Storage.HashLocPairP.Builder addMissedArBuilder(
+          int index) {
+        return getMissedArFieldBuilder().addBuilder(
+            index, org.opendedup.grpc.Storage.HashLocPairP.getDefaultInstance());
+      }
+      /**
+       * repeated .org.opendedup.grpc.HashLocPairP missedAr = 3;
+       */
+      public java.util.List 
+           getMissedArBuilderList() {
+        return getMissedArFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          org.opendedup.grpc.Storage.HashLocPairP, org.opendedup.grpc.Storage.HashLocPairP.Builder, org.opendedup.grpc.Storage.HashLocPairPOrBuilder> 
+          getMissedArFieldBuilder() {
+        if (missedArBuilder_ == null) {
+          missedArBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              org.opendedup.grpc.Storage.HashLocPairP, org.opendedup.grpc.Storage.HashLocPairP.Builder, org.opendedup.grpc.Storage.HashLocPairPOrBuilder>(
+                  missedAr_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          missedAr_ = null;
+        }
+        return missedArBuilder_;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -12617,6 +13915,12 @@ public interface SparseDedupeChunkReadRequestOrBuilder extends
      * @return The fileHandle.
      */
     long getFileHandle();
+
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.SparseDedupeChunkReadRequest}
@@ -12673,6 +13977,11 @@ private SparseDedupeChunkReadRequest(
               fileHandle_ = input.readInt64();
               break;
             }
+            case 24: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -12727,6 +14036,17 @@ public long getFileHandle() {
       return fileHandle_;
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 3;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -12747,6 +14067,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (fileHandle_ != 0L) {
         output.writeInt64(2, fileHandle_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(3, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -12764,6 +14087,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeInt64Size(2, fileHandle_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(3, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -12783,6 +14110,8 @@ public boolean equals(final java.lang.Object obj) {
           != other.getOffset()) return false;
       if (getFileHandle()
           != other.getFileHandle()) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -12800,6 +14129,9 @@ public int hashCode() {
       hash = (37 * hash) + FILEHANDLE_FIELD_NUMBER;
       hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
           getFileHandle());
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -12937,6 +14269,8 @@ public Builder clear() {
 
         fileHandle_ = 0L;
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -12965,6 +14299,7 @@ public org.opendedup.grpc.Storage.SparseDedupeChunkReadRequest buildPartial() {
         org.opendedup.grpc.Storage.SparseDedupeChunkReadRequest result = new org.opendedup.grpc.Storage.SparseDedupeChunkReadRequest(this);
         result.offset_ = offset_;
         result.fileHandle_ = fileHandle_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -13019,6 +14354,9 @@ public Builder mergeFrom(org.opendedup.grpc.Storage.SparseDedupeChunkReadRequest
         if (other.getFileHandle() != 0L) {
           setFileHandle(other.getFileHandle());
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -13109,6 +14447,37 @@ public Builder clearFileHandle() {
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 3;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -15262,6 +16631,12 @@ public interface InsertRecordOrBuilder extends
      * @return The inserted.
      */
     boolean getInserted();
+
+    /**
+     * int32 compressedLength = 3;
+     * @return The compressedLength.
+     */
+    int getCompressedLength();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.InsertRecord}
@@ -15318,6 +16693,11 @@ private InsertRecord(
               inserted_ = input.readBool();
               break;
             }
+            case 24: {
+
+              compressedLength_ = input.readInt32();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -15372,6 +16752,17 @@ public boolean getInserted() {
       return inserted_;
     }
 
+    public static final int COMPRESSEDLENGTH_FIELD_NUMBER = 3;
+    private int compressedLength_;
+    /**
+     * int32 compressedLength = 3;
+     * @return The compressedLength.
+     */
+    @java.lang.Override
+    public int getCompressedLength() {
+      return compressedLength_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -15392,6 +16783,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (inserted_ != false) {
         output.writeBool(2, inserted_);
       }
+      if (compressedLength_ != 0) {
+        output.writeInt32(3, compressedLength_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -15409,6 +16803,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeBoolSize(2, inserted_);
       }
+      if (compressedLength_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt32Size(3, compressedLength_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -15428,6 +16826,8 @@ public boolean equals(final java.lang.Object obj) {
           != other.getHashloc()) return false;
       if (getInserted()
           != other.getInserted()) return false;
+      if (getCompressedLength()
+          != other.getCompressedLength()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -15445,6 +16845,8 @@ public int hashCode() {
       hash = (37 * hash) + INSERTED_FIELD_NUMBER;
       hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
           getInserted());
+      hash = (37 * hash) + COMPRESSEDLENGTH_FIELD_NUMBER;
+      hash = (53 * hash) + getCompressedLength();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -15582,6 +16984,8 @@ public Builder clear() {
 
         inserted_ = false;
 
+        compressedLength_ = 0;
+
         return this;
       }
 
@@ -15610,6 +17014,7 @@ public org.opendedup.grpc.Storage.InsertRecord buildPartial() {
         org.opendedup.grpc.Storage.InsertRecord result = new org.opendedup.grpc.Storage.InsertRecord(this);
         result.hashloc_ = hashloc_;
         result.inserted_ = inserted_;
+        result.compressedLength_ = compressedLength_;
         onBuilt();
         return result;
       }
@@ -15664,6 +17069,9 @@ public Builder mergeFrom(org.opendedup.grpc.Storage.InsertRecord other) {
         if (other.getInserted() != false) {
           setInserted(other.getInserted());
         }
+        if (other.getCompressedLength() != 0) {
+          setCompressedLength(other.getCompressedLength());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -15754,6 +17162,37 @@ public Builder clearInserted() {
         onChanged();
         return this;
       }
+
+      private int compressedLength_ ;
+      /**
+       * int32 compressedLength = 3;
+       * @return The compressedLength.
+       */
+      @java.lang.Override
+      public int getCompressedLength() {
+        return compressedLength_;
+      }
+      /**
+       * int32 compressedLength = 3;
+       * @param value The compressedLength to set.
+       * @return This builder for chaining.
+       */
+      public Builder setCompressedLength(int value) {
+        
+        compressedLength_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int32 compressedLength = 3;
+       * @return This builder for chaining.
+       */
+      public Builder clearCompressedLength() {
+        
+        compressedLength_ = 0;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -15917,84 +17356,93 @@ public org.opendedup.grpc.Storage.InsertRecord getDefaultInstanceForType() {
   static {
     java.lang.String[] descriptorData = {
       "\n\rStorage.proto\022\022org.opendedup.grpc\032\016Fil" +
-      "eInfo.proto\"$\n\022CheckHashesRequest\022\016\n\006has" +
-      "hes\030\001 \003(\014\"j\n\023CheckHashesResponse\022\021\n\tloca" +
-      "tions\030\001 \003(\003\022\r\n\005error\030\002 \001(\t\0221\n\terrorCode\030" +
-      "\003 \001(\0162\036.org.opendedup.grpc.errorCodes\"-\n" +
-      "\031MetaDataDedupeFileRequest\022\020\n\010filePath\030\001" +
-      " \001(\t\"\'\n\027SparseDedupeFileRequest\022\014\n\004guid\030" +
-      "\001 \001(\t\"l\n\rChunkResponse\022\014\n\004data\030\001 \001(\014\022\013\n\003" +
-      "len\030\002 \001(\005\022\r\n\005error\030\003 \001(\t\0221\n\terrorCode\030\004 " +
-      "\001(\0162\036.org.opendedup.grpc.errorCodes\"(\n\nC" +
-      "hunkEntry\022\014\n\004hash\030\001 \001(\014\022\014\n\004data\030\002 \001(\014\"X\n" +
-      "\022WriteChunksRequest\022.\n\006chunks\030\001 \003(\0132\036.or" +
-      "g.opendedup.grpc.ChunkEntry\022\022\n\nfileHandl" +
-      "e\030\002 \001(\003\"\220\001\n\023WriteChunksResponse\022\r\n\005error" +
-      "\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.org.opendedu" +
-      "p.grpc.errorCodes\0227\n\rinsertRecords\030\003 \003(\013" +
-      "2 .org.opendedup.grpc.InsertRecord\"C\n\021Re" +
-      "adChunksRequest\022.\n\006chunks\030\001 \003(\0132\036.org.op" +
-      "endedup.grpc.ChunkEntry\"D\n\022ReadChunksRes" +
-      "ponse\022.\n\006chunks\030\001 \003(\0132\036.org.opendedup.gr" +
-      "pc.ChunkEntry\"\206\001\n\022HashingInfoRequest\022.\n\006" +
-      "chunks\030\001 \003(\0132\036.org.opendedup.grpc.ChunkE" +
-      "ntry\022\r\n\005error\030\002 \001(\t\0221\n\terrorCode\030\003 \001(\0162\036" +
-      ".org.opendedup.grpc.errorCodes\"\204\001\n\014HashL" +
+      "eInfo.proto\"7\n\022CheckHashesRequest\022\016\n\006has" +
+      "hes\030\001 \003(\014\022\021\n\tpvolumeID\030\002 \001(\003\"j\n\023CheckHas" +
+      "hesResponse\022\021\n\tlocations\030\001 \003(\003\022\r\n\005error\030" +
+      "\002 \001(\t\0221\n\terrorCode\030\003 \001(\0162\036.org.opendedup" +
+      ".grpc.errorCodes\"@\n\031MetaDataDedupeFileRe" +
+      "quest\022\020\n\010filePath\030\001 \001(\t\022\021\n\tpvolumeID\030\002 \001" +
+      "(\003\":\n\027SparseDedupeFileRequest\022\014\n\004guid\030\001 " +
+      "\001(\t\022\021\n\tpvolumeID\030\002 \001(\003\"l\n\rChunkResponse\022" +
+      "\014\n\004data\030\001 \001(\014\022\013\n\003len\030\002 \001(\005\022\r\n\005error\030\003 \001(" +
+      "\t\0221\n\terrorCode\030\004 \001(\0162\036.org.opendedup.grp" +
+      "c.errorCodes\"V\n\nChunkEntry\022\014\n\004hash\030\001 \001(\014" +
+      "\022\014\n\004data\030\002 \001(\014\022\022\n\ncompressed\030\003 \001(\010\022\030\n\020co" +
+      "mpressedLength\030\004 \001(\005\"k\n\022WriteChunksReque" +
+      "st\022.\n\006chunks\030\001 \003(\0132\036.org.opendedup.grpc." +
+      "ChunkEntry\022\022\n\nfileHandle\030\002 \001(\003\022\021\n\tpvolum" +
+      "eID\030\003 \001(\003\"\220\001\n\023WriteChunksResponse\022\r\n\005err" +
+      "or\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.org.opende" +
+      "dup.grpc.errorCodes\0227\n\rinsertRecords\030\003 \003" +
+      "(\0132 .org.opendedup.grpc.InsertRecord\"V\n\021" +
+      "ReadChunksRequest\022.\n\006chunks\030\001 \003(\0132\036.org." +
+      "opendedup.grpc.ChunkEntry\022\021\n\tpvolumeID\030\002" +
+      " \001(\003\"D\n\022ReadChunksResponse\022.\n\006chunks\030\001 \003" +
+      "(\0132\036.org.opendedup.grpc.ChunkEntry\"\231\001\n\022H" +
+      "ashingInfoRequest\022.\n\006chunks\030\001 \003(\0132\036.org." +
+      "opendedup.grpc.ChunkEntry\022\r\n\005error\030\002 \001(\t" +
+      "\0221\n\terrorCode\030\003 \001(\0162\036.org.opendedup.grpc" +
+      ".errorCodes\022\021\n\tpvolumeID\030\004 \001(\003\"\204\001\n\014HashL" +
       "ocPairP\022\014\n\004hash\030\001 \001(\014\022\017\n\007hashloc\030\002 \001(\003\022\013" +
       "\n\003len\030\003 \001(\005\022\013\n\003pos\030\004 \001(\005\022\016\n\006offset\030\005 \001(\005" +
       "\022\014\n\004nlen\030\006 \001(\005\022\013\n\003dup\030\007 \001(\010\022\020\n\010inserted\030" +
-      "\010 \001(\010\"\231\002\n\020SparseDataChunkP\022\014\n\004fpos\030\001 \001(\003" +
+      "\010 \001(\010\"\263\002\n\020SparseDataChunkP\022\014\n\004fpos\030\001 \001(\003" +
       "\022\013\n\003len\030\002 \001(\005\0222\n\005flags\030\003 \003(\0162#.org.opend" +
       "edup.grpc.SparseDataFlags\022\017\n\007version\030\004 \001" +
       "(\005\0228\n\002ar\030\005 \003(\0132,.org.opendedup.grpc.Spar" +
       "seDataChunkP.ArEntry\022\014\n\004doop\030\006 \001(\005\022\020\n\010pr" +
-      "evdoop\030\007 \001(\005\032K\n\007ArEntry\022\013\n\003key\030\001 \001(\005\022/\n\005" +
-      "value\030\002 \001(\0132 .org.opendedup.grpc.HashLoc" +
-      "PairP:\0028\001\"~\n\035SparseDedupeChunkWriteReque" +
-      "st\0223\n\005chunk\030\001 \001(\0132$.org.opendedup.grpc.S" +
-      "parseDataChunkP\022\022\n\nfileHandle\030\002 \001(\003\022\024\n\014f" +
-      "ileLocation\030\003 \001(\003\"b\n\036SparseDedupeChunkWr" +
-      "iteResponse\022\r\n\005error\030\001 \001(\t\0221\n\terrorCode\030" +
-      "\002 \001(\0162\036.org.opendedup.grpc.errorCodes\"B\n" +
-      "\034SparseDedupeChunkReadRequest\022\016\n\006offset\030" +
-      "\001 \001(\003\022\022\n\nfileHandle\030\002 \001(\003\"\226\001\n\035SparseDedu" +
-      "peChunkReadResponse\022\r\n\005error\030\001 \001(\t\0221\n\ter" +
-      "rorCode\030\002 \001(\0162\036.org.opendedup.grpc.error" +
-      "Codes\0223\n\005chunk\030\003 \001(\0132$.org.opendedup.grp" +
-      "c.SparseDataChunkP\"\206\002\n\023HashingInfoRespon" +
-      "se\022\021\n\tchunkSize\030\001 \001(\003\022\026\n\016minSegmentSize\030" +
-      "\002 \001(\003\022\026\n\016maxSegmentSize\030\003 \001(\003\022\022\n\npolyNum" +
-      "ber\030\004 \001(\003\022\022\n\nwindowSize\030\005 \001(\003\022.\n\010hashtyp" +
-      "e\030\006 \001(\0162\034.org.opendedup.grpc.hashtype\022\022\n" +
-      "\nmapVersion\030\007 \001(\005\022\r\n\005error\030\010 \001(\t\0221\n\terro" +
-      "rCode\030\t \001(\0162\036.org.opendedup.grpc.errorCo" +
-      "des\"1\n\014InsertRecord\022\017\n\007hashloc\030\001 \001(\003\022\020\n\010" +
-      "inserted\030\002 \001(\010*$\n\017SparseDataFlags\022\021\n\rREC" +
-      "ONSTRUCTED\020\000*0\n\010hashtype\022\n\n\006SHA256\020\000\022\007\n\003" +
-      "MD5\020\001\022\017\n\013UNSUPPORTED\020\0022\336\006\n\016StorageServic" +
-      "e\022^\n\013HashingInfo\022&.org.opendedup.grpc.Ha" +
-      "shingInfoRequest\032\'.org.opendedup.grpc.Ha" +
-      "shingInfoResponse\022^\n\013CheckHashes\022&.org.o" +
-      "pendedup.grpc.CheckHashesRequest\032\'.org.o" +
-      "pendedup.grpc.CheckHashesResponse\022^\n\013Wri" +
-      "teChunks\022&.org.opendedup.grpc.WriteChunk" +
-      "sRequest\032\'.org.opendedup.grpc.WriteChunk" +
-      "sResponse\022[\n\nReadChunks\022%.org.opendedup." +
-      "grpc.ReadChunksRequest\032&.org.opendedup.g" +
-      "rpc.ReadChunksResponse\022}\n\024WriteSparseDat" +
-      "aChunk\0221.org.opendedup.grpc.SparseDedupe" +
-      "ChunkWriteRequest\0322.org.opendedup.grpc.S" +
-      "parseDedupeChunkWriteResponse\022z\n\023ReadSpa" +
-      "rseDataChunk\0220.org.opendedup.grpc.Sparse" +
-      "DedupeChunkReadRequest\0321.org.opendedup.g" +
-      "rpc.SparseDedupeChunkReadResponse\022k\n\025Get" +
-      "MetaDataDedupeFile\022-.org.opendedup.grpc." +
-      "MetaDataDedupeFileRequest\032!.org.opendedu" +
-      "p.grpc.ChunkResponse0\001\022g\n\023GetSparseDedup" +
-      "eFile\022+.org.opendedup.grpc.SparseDedupeF" +
-      "ileRequest\032!.org.opendedup.grpc.ChunkRes" +
-      "ponse0\001B0Z.github.com/opendedup/sdfs-cli" +
-      "ent-go/sdfs/;sdfsb\006proto3"
+      "evdoop\030\007 \001(\005\022\030\n\020compressedLength\030\010 \001(\005\032K" +
+      "\n\007ArEntry\022\013\n\003key\030\001 \001(\005\022/\n\005value\030\002 \001(\0132 ." +
+      "org.opendedup.grpc.HashLocPairP:\0028\001\"\327\001\n\035" +
+      "SparseDedupeChunkWriteRequest\0223\n\005chunk\030\001" +
+      " \001(\0132$.org.opendedup.grpc.SparseDataChun" +
+      "kP\022\022\n\nfileHandle\030\002 \001(\003\022\024\n\014fileLocation\030\003" +
+      " \001(\003\022\021\n\tpvolumeID\030\004 \001(\003\022\022\n\ncompressed\030\005 " +
+      "\001(\010\022\027\n\017compressedChunk\030\006 \001(\014\022\027\n\017uncompre" +
+      "ssedLen\030\007 \001(\005\"b\n\036SparseDedupeChunkWriteR" +
+      "esponse\022\r\n\005error\030\001 \001(\t\0221\n\terrorCode\030\002 \001(" +
+      "\0162\036.org.opendedup.grpc.errorCodes\"U\n\034Spa" +
+      "rseDedupeChunkReadRequest\022\016\n\006offset\030\001 \001(" +
+      "\003\022\022\n\nfileHandle\030\002 \001(\003\022\021\n\tpvolumeID\030\003 \001(\003" +
+      "\"\226\001\n\035SparseDedupeChunkReadResponse\022\r\n\005er" +
+      "ror\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.org.opend" +
+      "edup.grpc.errorCodes\0223\n\005chunk\030\003 \001(\0132$.or" +
+      "g.opendedup.grpc.SparseDataChunkP\"\206\002\n\023Ha" +
+      "shingInfoResponse\022\021\n\tchunkSize\030\001 \001(\003\022\026\n\016" +
+      "minSegmentSize\030\002 \001(\003\022\026\n\016maxSegmentSize\030\003" +
+      " \001(\003\022\022\n\npolyNumber\030\004 \001(\003\022\022\n\nwindowSize\030\005" +
+      " \001(\003\022.\n\010hashtype\030\006 \001(\0162\034.org.opendedup.g" +
+      "rpc.hashtype\022\022\n\nmapVersion\030\007 \001(\005\022\r\n\005erro" +
+      "r\030\010 \001(\t\0221\n\terrorCode\030\t \001(\0162\036.org.opended" +
+      "up.grpc.errorCodes\"K\n\014InsertRecord\022\017\n\007ha" +
+      "shloc\030\001 \001(\003\022\020\n\010inserted\030\002 \001(\010\022\030\n\020compres" +
+      "sedLength\030\003 \001(\005*$\n\017SparseDataFlags\022\021\n\rRE" +
+      "CONSTRUCTED\020\000*0\n\010hashtype\022\n\n\006SHA256\020\000\022\007\n" +
+      "\003MD5\020\001\022\017\n\013UNSUPPORTED\020\0022\336\006\n\016StorageServi" +
+      "ce\022^\n\013HashingInfo\022&.org.opendedup.grpc.H" +
+      "ashingInfoRequest\032\'.org.opendedup.grpc.H" +
+      "ashingInfoResponse\022^\n\013CheckHashes\022&.org." +
+      "opendedup.grpc.CheckHashesRequest\032\'.org." +
+      "opendedup.grpc.CheckHashesResponse\022^\n\013Wr" +
+      "iteChunks\022&.org.opendedup.grpc.WriteChun" +
+      "ksRequest\032\'.org.opendedup.grpc.WriteChun" +
+      "ksResponse\022[\n\nReadChunks\022%.org.opendedup" +
+      ".grpc.ReadChunksRequest\032&.org.opendedup." +
+      "grpc.ReadChunksResponse\022}\n\024WriteSparseDa" +
+      "taChunk\0221.org.opendedup.grpc.SparseDedup" +
+      "eChunkWriteRequest\0322.org.opendedup.grpc." +
+      "SparseDedupeChunkWriteResponse\022z\n\023ReadSp" +
+      "arseDataChunk\0220.org.opendedup.grpc.Spars" +
+      "eDedupeChunkReadRequest\0321.org.opendedup." +
+      "grpc.SparseDedupeChunkReadResponse\022k\n\025Ge" +
+      "tMetaDataDedupeFile\022-.org.opendedup.grpc" +
+      ".MetaDataDedupeFileRequest\032!.org.opended" +
+      "up.grpc.ChunkResponse0\001\022g\n\023GetSparseDedu" +
+      "peFile\022+.org.opendedup.grpc.SparseDedupe" +
+      "FileRequest\032!.org.opendedup.grpc.ChunkRe" +
+      "sponse0\001B0Z.github.com/opendedup/sdfs-cl" +
+      "ient-go/sdfs/;sdfsb\006proto3"
+
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
@@ -16006,7 +17454,7 @@ public org.opendedup.grpc.Storage.InsertRecord getDefaultInstanceForType() {
     internal_static_org_opendedup_grpc_CheckHashesRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_CheckHashesRequest_descriptor,
-        new java.lang.String[] { "Hashes", });
+        new java.lang.String[] { "Hashes", "PvolumeID", });
     internal_static_org_opendedup_grpc_CheckHashesResponse_descriptor =
       getDescriptor().getMessageTypes().get(1);
     internal_static_org_opendedup_grpc_CheckHashesResponse_fieldAccessorTable = new
@@ -16018,13 +17466,13 @@ public org.opendedup.grpc.Storage.InsertRecord getDefaultInstanceForType() {
     internal_static_org_opendedup_grpc_MetaDataDedupeFileRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_MetaDataDedupeFileRequest_descriptor,
-        new java.lang.String[] { "FilePath", });
+        new java.lang.String[] { "FilePath", "PvolumeID", });
     internal_static_org_opendedup_grpc_SparseDedupeFileRequest_descriptor =
       getDescriptor().getMessageTypes().get(3);
     internal_static_org_opendedup_grpc_SparseDedupeFileRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_SparseDedupeFileRequest_descriptor,
-        new java.lang.String[] { "Guid", });
+        new java.lang.String[] { "Guid", "PvolumeID", });
     internal_static_org_opendedup_grpc_ChunkResponse_descriptor =
       getDescriptor().getMessageTypes().get(4);
     internal_static_org_opendedup_grpc_ChunkResponse_fieldAccessorTable = new
@@ -16036,13 +17484,13 @@ public org.opendedup.grpc.Storage.InsertRecord getDefaultInstanceForType() {
     internal_static_org_opendedup_grpc_ChunkEntry_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_ChunkEntry_descriptor,
-        new java.lang.String[] { "Hash", "Data", });
+        new java.lang.String[] { "Hash", "Data", "Compressed", "CompressedLength", });
     internal_static_org_opendedup_grpc_WriteChunksRequest_descriptor =
       getDescriptor().getMessageTypes().get(6);
     internal_static_org_opendedup_grpc_WriteChunksRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_WriteChunksRequest_descriptor,
-        new java.lang.String[] { "Chunks", "FileHandle", });
+        new java.lang.String[] { "Chunks", "FileHandle", "PvolumeID", });
     internal_static_org_opendedup_grpc_WriteChunksResponse_descriptor =
       getDescriptor().getMessageTypes().get(7);
     internal_static_org_opendedup_grpc_WriteChunksResponse_fieldAccessorTable = new
@@ -16054,7 +17502,7 @@ public org.opendedup.grpc.Storage.InsertRecord getDefaultInstanceForType() {
     internal_static_org_opendedup_grpc_ReadChunksRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_ReadChunksRequest_descriptor,
-        new java.lang.String[] { "Chunks", });
+        new java.lang.String[] { "Chunks", "PvolumeID", });
     internal_static_org_opendedup_grpc_ReadChunksResponse_descriptor =
       getDescriptor().getMessageTypes().get(9);
     internal_static_org_opendedup_grpc_ReadChunksResponse_fieldAccessorTable = new
@@ -16066,7 +17514,7 @@ public org.opendedup.grpc.Storage.InsertRecord getDefaultInstanceForType() {
     internal_static_org_opendedup_grpc_HashingInfoRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_HashingInfoRequest_descriptor,
-        new java.lang.String[] { "Chunks", "Error", "ErrorCode", });
+        new java.lang.String[] { "Chunks", "Error", "ErrorCode", "PvolumeID", });
     internal_static_org_opendedup_grpc_HashLocPairP_descriptor =
       getDescriptor().getMessageTypes().get(11);
     internal_static_org_opendedup_grpc_HashLocPairP_fieldAccessorTable = new
@@ -16078,7 +17526,7 @@ public org.opendedup.grpc.Storage.InsertRecord getDefaultInstanceForType() {
     internal_static_org_opendedup_grpc_SparseDataChunkP_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_SparseDataChunkP_descriptor,
-        new java.lang.String[] { "Fpos", "Len", "Flags", "Version", "Ar", "Doop", "Prevdoop", });
+        new java.lang.String[] { "Fpos", "Len", "Flags", "Version", "Ar", "Doop", "Prevdoop", "CompressedLength", });
     internal_static_org_opendedup_grpc_SparseDataChunkP_ArEntry_descriptor =
       internal_static_org_opendedup_grpc_SparseDataChunkP_descriptor.getNestedTypes().get(0);
     internal_static_org_opendedup_grpc_SparseDataChunkP_ArEntry_fieldAccessorTable = new
@@ -16090,19 +17538,19 @@ public org.opendedup.grpc.Storage.InsertRecord getDefaultInstanceForType() {
     internal_static_org_opendedup_grpc_SparseDedupeChunkWriteRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_SparseDedupeChunkWriteRequest_descriptor,
-        new java.lang.String[] { "Chunk", "FileHandle", "FileLocation", });
+        new java.lang.String[] { "Chunk", "FileHandle", "FileLocation", "PvolumeID", "Compressed", "CompressedChunk", "UncompressedLen", });
     internal_static_org_opendedup_grpc_SparseDedupeChunkWriteResponse_descriptor =
       getDescriptor().getMessageTypes().get(14);
     internal_static_org_opendedup_grpc_SparseDedupeChunkWriteResponse_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_SparseDedupeChunkWriteResponse_descriptor,
-        new java.lang.String[] { "Error", "ErrorCode", });
+        new java.lang.String[] { "Error", "ErrorCode", "MissedAr", });
     internal_static_org_opendedup_grpc_SparseDedupeChunkReadRequest_descriptor =
       getDescriptor().getMessageTypes().get(15);
     internal_static_org_opendedup_grpc_SparseDedupeChunkReadRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_SparseDedupeChunkReadRequest_descriptor,
-        new java.lang.String[] { "Offset", "FileHandle", });
+        new java.lang.String[] { "Offset", "FileHandle", "PvolumeID", });
     internal_static_org_opendedup_grpc_SparseDedupeChunkReadResponse_descriptor =
       getDescriptor().getMessageTypes().get(16);
     internal_static_org_opendedup_grpc_SparseDedupeChunkReadResponse_fieldAccessorTable = new
@@ -16120,7 +17568,7 @@ public org.opendedup.grpc.Storage.InsertRecord getDefaultInstanceForType() {
     internal_static_org_opendedup_grpc_InsertRecord_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_InsertRecord_descriptor,
-        new java.lang.String[] { "Hashloc", "Inserted", });
+        new java.lang.String[] { "Hashloc", "Inserted", "CompressedLength", });
     org.opendedup.grpc.FileInfo.getDescriptor();
   }
 
diff --git a/src/org/opendedup/grpc/StorageServiceGrpc.java b/src/org/opendedup/grpc/StorageServiceGrpc.java
index 358efcfe8..f9a6dd94e 100644
--- a/src/org/opendedup/grpc/StorageServiceGrpc.java
+++ b/src/org/opendedup/grpc/StorageServiceGrpc.java
@@ -1,19 +1,6 @@
 package org.opendedup.grpc;
 
 import static io.grpc.MethodDescriptor.generateFullMethodName;
-import static io.grpc.stub.ClientCalls.asyncBidiStreamingCall;
-import static io.grpc.stub.ClientCalls.asyncClientStreamingCall;
-import static io.grpc.stub.ClientCalls.asyncServerStreamingCall;
-import static io.grpc.stub.ClientCalls.asyncUnaryCall;
-import static io.grpc.stub.ClientCalls.blockingServerStreamingCall;
-import static io.grpc.stub.ClientCalls.blockingUnaryCall;
-import static io.grpc.stub.ClientCalls.futureUnaryCall;
-import static io.grpc.stub.ServerCalls.asyncBidiStreamingCall;
-import static io.grpc.stub.ServerCalls.asyncClientStreamingCall;
-import static io.grpc.stub.ServerCalls.asyncServerStreamingCall;
-import static io.grpc.stub.ServerCalls.asyncUnaryCall;
-import static io.grpc.stub.ServerCalls.asyncUnimplementedStreamingCall;
-import static io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall;
 
 /**
  * 
@@ -21,8 +8,9 @@
  * 
*/ @javax.annotation.Generated( - value = "by gRPC proto compiler (version 1.30.2)", + value = "by gRPC proto compiler (version 1.46.0)", comments = "Source: Storage.proto") +@io.grpc.stub.annotations.GrpcGenerated public final class StorageServiceGrpc { private StorageServiceGrpc() {} @@ -333,112 +321,112 @@ public static abstract class StorageServiceImplBase implements io.grpc.BindableS */ public void hashingInfo(org.opendedup.grpc.Storage.HashingInfoRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnimplementedUnaryCall(getHashingInfoMethod(), responseObserver); + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getHashingInfoMethod(), responseObserver); } /** */ public void checkHashes(org.opendedup.grpc.Storage.CheckHashesRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnimplementedUnaryCall(getCheckHashesMethod(), responseObserver); + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getCheckHashesMethod(), responseObserver); } /** */ public void writeChunks(org.opendedup.grpc.Storage.WriteChunksRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnimplementedUnaryCall(getWriteChunksMethod(), responseObserver); + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getWriteChunksMethod(), responseObserver); } /** */ public void readChunks(org.opendedup.grpc.Storage.ReadChunksRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnimplementedUnaryCall(getReadChunksMethod(), responseObserver); + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getReadChunksMethod(), responseObserver); } /** */ public void writeSparseDataChunk(org.opendedup.grpc.Storage.SparseDedupeChunkWriteRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnimplementedUnaryCall(getWriteSparseDataChunkMethod(), responseObserver); + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getWriteSparseDataChunkMethod(), responseObserver); } /** */ public void readSparseDataChunk(org.opendedup.grpc.Storage.SparseDedupeChunkReadRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnimplementedUnaryCall(getReadSparseDataChunkMethod(), responseObserver); + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getReadSparseDataChunkMethod(), responseObserver); } /** */ public void getMetaDataDedupeFile(org.opendedup.grpc.Storage.MetaDataDedupeFileRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnimplementedUnaryCall(getGetMetaDataDedupeFileMethod(), responseObserver); + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetMetaDataDedupeFileMethod(), responseObserver); } /** */ public void getSparseDedupeFile(org.opendedup.grpc.Storage.SparseDedupeFileRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnimplementedUnaryCall(getGetSparseDedupeFileMethod(), responseObserver); + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetSparseDedupeFileMethod(), responseObserver); } @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() { return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor()) .addMethod( getHashingInfoMethod(), - asyncUnaryCall( + io.grpc.stub.ServerCalls.asyncUnaryCall( new MethodHandlers< org.opendedup.grpc.Storage.HashingInfoRequest, org.opendedup.grpc.Storage.HashingInfoResponse>( this, METHODID_HASHING_INFO))) .addMethod( getCheckHashesMethod(), - asyncUnaryCall( + io.grpc.stub.ServerCalls.asyncUnaryCall( new MethodHandlers< org.opendedup.grpc.Storage.CheckHashesRequest, org.opendedup.grpc.Storage.CheckHashesResponse>( this, METHODID_CHECK_HASHES))) .addMethod( getWriteChunksMethod(), - asyncUnaryCall( + io.grpc.stub.ServerCalls.asyncUnaryCall( new MethodHandlers< org.opendedup.grpc.Storage.WriteChunksRequest, org.opendedup.grpc.Storage.WriteChunksResponse>( this, METHODID_WRITE_CHUNKS))) .addMethod( getReadChunksMethod(), - asyncUnaryCall( + io.grpc.stub.ServerCalls.asyncUnaryCall( new MethodHandlers< org.opendedup.grpc.Storage.ReadChunksRequest, org.opendedup.grpc.Storage.ReadChunksResponse>( this, METHODID_READ_CHUNKS))) .addMethod( getWriteSparseDataChunkMethod(), - asyncUnaryCall( + io.grpc.stub.ServerCalls.asyncUnaryCall( new MethodHandlers< org.opendedup.grpc.Storage.SparseDedupeChunkWriteRequest, org.opendedup.grpc.Storage.SparseDedupeChunkWriteResponse>( this, METHODID_WRITE_SPARSE_DATA_CHUNK))) .addMethod( getReadSparseDataChunkMethod(), - asyncUnaryCall( + io.grpc.stub.ServerCalls.asyncUnaryCall( new MethodHandlers< org.opendedup.grpc.Storage.SparseDedupeChunkReadRequest, org.opendedup.grpc.Storage.SparseDedupeChunkReadResponse>( this, METHODID_READ_SPARSE_DATA_CHUNK))) .addMethod( getGetMetaDataDedupeFileMethod(), - asyncServerStreamingCall( + io.grpc.stub.ServerCalls.asyncServerStreamingCall( new MethodHandlers< org.opendedup.grpc.Storage.MetaDataDedupeFileRequest, org.opendedup.grpc.Storage.ChunkResponse>( this, METHODID_GET_META_DATA_DEDUPE_FILE))) .addMethod( getGetSparseDedupeFileMethod(), - asyncServerStreamingCall( + io.grpc.stub.ServerCalls.asyncServerStreamingCall( new MethodHandlers< org.opendedup.grpc.Storage.SparseDedupeFileRequest, org.opendedup.grpc.Storage.ChunkResponse>( @@ -468,7 +456,7 @@ protected StorageServiceStub build( */ public void hashingInfo(org.opendedup.grpc.Storage.HashingInfoRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnaryCall( + io.grpc.stub.ClientCalls.asyncUnaryCall( getChannel().newCall(getHashingInfoMethod(), getCallOptions()), request, responseObserver); } @@ -476,7 +464,7 @@ public void hashingInfo(org.opendedup.grpc.Storage.HashingInfoRequest request, */ public void checkHashes(org.opendedup.grpc.Storage.CheckHashesRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnaryCall( + io.grpc.stub.ClientCalls.asyncUnaryCall( getChannel().newCall(getCheckHashesMethod(), getCallOptions()), request, responseObserver); } @@ -484,7 +472,7 @@ public void checkHashes(org.opendedup.grpc.Storage.CheckHashesRequest request, */ public void writeChunks(org.opendedup.grpc.Storage.WriteChunksRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnaryCall( + io.grpc.stub.ClientCalls.asyncUnaryCall( getChannel().newCall(getWriteChunksMethod(), getCallOptions()), request, responseObserver); } @@ -492,7 +480,7 @@ public void writeChunks(org.opendedup.grpc.Storage.WriteChunksRequest request, */ public void readChunks(org.opendedup.grpc.Storage.ReadChunksRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnaryCall( + io.grpc.stub.ClientCalls.asyncUnaryCall( getChannel().newCall(getReadChunksMethod(), getCallOptions()), request, responseObserver); } @@ -500,7 +488,7 @@ public void readChunks(org.opendedup.grpc.Storage.ReadChunksRequest request, */ public void writeSparseDataChunk(org.opendedup.grpc.Storage.SparseDedupeChunkWriteRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnaryCall( + io.grpc.stub.ClientCalls.asyncUnaryCall( getChannel().newCall(getWriteSparseDataChunkMethod(), getCallOptions()), request, responseObserver); } @@ -508,7 +496,7 @@ public void writeSparseDataChunk(org.opendedup.grpc.Storage.SparseDedupeChunkWri */ public void readSparseDataChunk(org.opendedup.grpc.Storage.SparseDedupeChunkReadRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnaryCall( + io.grpc.stub.ClientCalls.asyncUnaryCall( getChannel().newCall(getReadSparseDataChunkMethod(), getCallOptions()), request, responseObserver); } @@ -516,7 +504,7 @@ public void readSparseDataChunk(org.opendedup.grpc.Storage.SparseDedupeChunkRead */ public void getMetaDataDedupeFile(org.opendedup.grpc.Storage.MetaDataDedupeFileRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncServerStreamingCall( + io.grpc.stub.ClientCalls.asyncServerStreamingCall( getChannel().newCall(getGetMetaDataDedupeFileMethod(), getCallOptions()), request, responseObserver); } @@ -524,7 +512,7 @@ public void getMetaDataDedupeFile(org.opendedup.grpc.Storage.MetaDataDedupeFileR */ public void getSparseDedupeFile(org.opendedup.grpc.Storage.SparseDedupeFileRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncServerStreamingCall( + io.grpc.stub.ClientCalls.asyncServerStreamingCall( getChannel().newCall(getGetSparseDedupeFileMethod(), getCallOptions()), request, responseObserver); } } @@ -549,42 +537,42 @@ protected StorageServiceBlockingStub build( /** */ public org.opendedup.grpc.Storage.HashingInfoResponse hashingInfo(org.opendedup.grpc.Storage.HashingInfoRequest request) { - return blockingUnaryCall( + return io.grpc.stub.ClientCalls.blockingUnaryCall( getChannel(), getHashingInfoMethod(), getCallOptions(), request); } /** */ public org.opendedup.grpc.Storage.CheckHashesResponse checkHashes(org.opendedup.grpc.Storage.CheckHashesRequest request) { - return blockingUnaryCall( + return io.grpc.stub.ClientCalls.blockingUnaryCall( getChannel(), getCheckHashesMethod(), getCallOptions(), request); } /** */ public org.opendedup.grpc.Storage.WriteChunksResponse writeChunks(org.opendedup.grpc.Storage.WriteChunksRequest request) { - return blockingUnaryCall( + return io.grpc.stub.ClientCalls.blockingUnaryCall( getChannel(), getWriteChunksMethod(), getCallOptions(), request); } /** */ public org.opendedup.grpc.Storage.ReadChunksResponse readChunks(org.opendedup.grpc.Storage.ReadChunksRequest request) { - return blockingUnaryCall( + return io.grpc.stub.ClientCalls.blockingUnaryCall( getChannel(), getReadChunksMethod(), getCallOptions(), request); } /** */ public org.opendedup.grpc.Storage.SparseDedupeChunkWriteResponse writeSparseDataChunk(org.opendedup.grpc.Storage.SparseDedupeChunkWriteRequest request) { - return blockingUnaryCall( + return io.grpc.stub.ClientCalls.blockingUnaryCall( getChannel(), getWriteSparseDataChunkMethod(), getCallOptions(), request); } /** */ public org.opendedup.grpc.Storage.SparseDedupeChunkReadResponse readSparseDataChunk(org.opendedup.grpc.Storage.SparseDedupeChunkReadRequest request) { - return blockingUnaryCall( + return io.grpc.stub.ClientCalls.blockingUnaryCall( getChannel(), getReadSparseDataChunkMethod(), getCallOptions(), request); } @@ -592,7 +580,7 @@ public org.opendedup.grpc.Storage.SparseDedupeChunkReadResponse readSparseDataCh */ public java.util.Iterator getMetaDataDedupeFile( org.opendedup.grpc.Storage.MetaDataDedupeFileRequest request) { - return blockingServerStreamingCall( + return io.grpc.stub.ClientCalls.blockingServerStreamingCall( getChannel(), getGetMetaDataDedupeFileMethod(), getCallOptions(), request); } @@ -600,7 +588,7 @@ public java.util.Iterator getMetaDataD */ public java.util.Iterator getSparseDedupeFile( org.opendedup.grpc.Storage.SparseDedupeFileRequest request) { - return blockingServerStreamingCall( + return io.grpc.stub.ClientCalls.blockingServerStreamingCall( getChannel(), getGetSparseDedupeFileMethod(), getCallOptions(), request); } } @@ -626,7 +614,7 @@ protected StorageServiceFutureStub build( */ public com.google.common.util.concurrent.ListenableFuture hashingInfo( org.opendedup.grpc.Storage.HashingInfoRequest request) { - return futureUnaryCall( + return io.grpc.stub.ClientCalls.futureUnaryCall( getChannel().newCall(getHashingInfoMethod(), getCallOptions()), request); } @@ -634,7 +622,7 @@ public com.google.common.util.concurrent.ListenableFuture checkHashes( org.opendedup.grpc.Storage.CheckHashesRequest request) { - return futureUnaryCall( + return io.grpc.stub.ClientCalls.futureUnaryCall( getChannel().newCall(getCheckHashesMethod(), getCallOptions()), request); } @@ -642,7 +630,7 @@ public com.google.common.util.concurrent.ListenableFuture writeChunks( org.opendedup.grpc.Storage.WriteChunksRequest request) { - return futureUnaryCall( + return io.grpc.stub.ClientCalls.futureUnaryCall( getChannel().newCall(getWriteChunksMethod(), getCallOptions()), request); } @@ -650,7 +638,7 @@ public com.google.common.util.concurrent.ListenableFuture readChunks( org.opendedup.grpc.Storage.ReadChunksRequest request) { - return futureUnaryCall( + return io.grpc.stub.ClientCalls.futureUnaryCall( getChannel().newCall(getReadChunksMethod(), getCallOptions()), request); } @@ -658,7 +646,7 @@ public com.google.common.util.concurrent.ListenableFuture writeSparseDataChunk( org.opendedup.grpc.Storage.SparseDedupeChunkWriteRequest request) { - return futureUnaryCall( + return io.grpc.stub.ClientCalls.futureUnaryCall( getChannel().newCall(getWriteSparseDataChunkMethod(), getCallOptions()), request); } @@ -666,7 +654,7 @@ public com.google.common.util.concurrent.ListenableFuture readSparseDataChunk( org.opendedup.grpc.Storage.SparseDedupeChunkReadRequest request) { - return futureUnaryCall( + return io.grpc.stub.ClientCalls.futureUnaryCall( getChannel().newCall(getReadSparseDataChunkMethod(), getCallOptions()), request); } } diff --git a/src/org/opendedup/grpc/VolumeServiceGrpc.java b/src/org/opendedup/grpc/VolumeServiceGrpc.java index 8363286a3..03f8bb653 100644 --- a/src/org/opendedup/grpc/VolumeServiceGrpc.java +++ b/src/org/opendedup/grpc/VolumeServiceGrpc.java @@ -1,19 +1,6 @@ package org.opendedup.grpc; import static io.grpc.MethodDescriptor.generateFullMethodName; -import static io.grpc.stub.ClientCalls.asyncBidiStreamingCall; -import static io.grpc.stub.ClientCalls.asyncClientStreamingCall; -import static io.grpc.stub.ClientCalls.asyncServerStreamingCall; -import static io.grpc.stub.ClientCalls.asyncUnaryCall; -import static io.grpc.stub.ClientCalls.blockingServerStreamingCall; -import static io.grpc.stub.ClientCalls.blockingUnaryCall; -import static io.grpc.stub.ClientCalls.futureUnaryCall; -import static io.grpc.stub.ServerCalls.asyncBidiStreamingCall; -import static io.grpc.stub.ServerCalls.asyncClientStreamingCall; -import static io.grpc.stub.ServerCalls.asyncServerStreamingCall; -import static io.grpc.stub.ServerCalls.asyncUnaryCall; -import static io.grpc.stub.ServerCalls.asyncUnimplementedStreamingCall; -import static io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall; /** *
@@ -21,8 +8,9 @@
  * 
*/ @javax.annotation.Generated( - value = "by gRPC proto compiler (version 1.30.2)", + value = "by gRPC proto compiler (version 1.46.0)", comments = "Source: VolumeService.proto") +@io.grpc.stub.annotations.GrpcGenerated public final class VolumeServiceGrpc { private VolumeServiceGrpc() {} @@ -612,238 +600,238 @@ public static abstract class VolumeServiceImplBase implements io.grpc.BindableSe */ public void authenticateUser(org.opendedup.grpc.VolumeServiceOuterClass.AuthenticationRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnimplementedUnaryCall(getAuthenticateUserMethod(), responseObserver); + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getAuthenticateUserMethod(), responseObserver); } /** */ public void getVolumeInfo(org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnimplementedUnaryCall(getGetVolumeInfoMethod(), responseObserver); + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetVolumeInfoMethod(), responseObserver); } /** */ public void shutdownVolume(org.opendedup.grpc.Shutdown.ShutdownRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnimplementedUnaryCall(getShutdownVolumeMethod(), responseObserver); + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getShutdownVolumeMethod(), responseObserver); } /** */ public void cleanStore(org.opendedup.grpc.VolumeServiceOuterClass.CleanStoreRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnimplementedUnaryCall(getCleanStoreMethod(), responseObserver); + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getCleanStoreMethod(), responseObserver); } /** */ public void deleteCloudVolume(org.opendedup.grpc.VolumeServiceOuterClass.DeleteCloudVolumeRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnimplementedUnaryCall(getDeleteCloudVolumeMethod(), responseObserver); + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteCloudVolumeMethod(), responseObserver); } /** */ public void dSEInfo(org.opendedup.grpc.VolumeServiceOuterClass.DSERequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnimplementedUnaryCall(getDSEInfoMethod(), responseObserver); + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDSEInfoMethod(), responseObserver); } /** */ public void systemInfo(org.opendedup.grpc.VolumeServiceOuterClass.SystemInfoRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnimplementedUnaryCall(getSystemInfoMethod(), responseObserver); + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSystemInfoMethod(), responseObserver); } /** */ public void setVolumeCapacity(org.opendedup.grpc.VolumeServiceOuterClass.SetVolumeCapacityRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnimplementedUnaryCall(getSetVolumeCapacityMethod(), responseObserver); + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetVolumeCapacityMethod(), responseObserver); } /** */ public void getConnectedVolumes(org.opendedup.grpc.VolumeServiceOuterClass.CloudVolumesRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnimplementedUnaryCall(getGetConnectedVolumesMethod(), responseObserver); + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetConnectedVolumesMethod(), responseObserver); } /** */ public void getGCSchedule(org.opendedup.grpc.VolumeServiceOuterClass.GCScheduleRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnimplementedUnaryCall(getGetGCScheduleMethod(), responseObserver); + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetGCScheduleMethod(), responseObserver); } /** */ public void setCacheSize(org.opendedup.grpc.VolumeServiceOuterClass.SetCacheSizeRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnimplementedUnaryCall(getSetCacheSizeMethod(), responseObserver); + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetCacheSizeMethod(), responseObserver); } /** */ public void setPassword(org.opendedup.grpc.VolumeServiceOuterClass.SetPasswordRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnimplementedUnaryCall(getSetPasswordMethod(), responseObserver); + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetPasswordMethod(), responseObserver); } /** */ public void setReadSpeed(org.opendedup.grpc.VolumeServiceOuterClass.SpeedRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnimplementedUnaryCall(getSetReadSpeedMethod(), responseObserver); + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetReadSpeedMethod(), responseObserver); } /** */ public void setWriteSpeed(org.opendedup.grpc.VolumeServiceOuterClass.SpeedRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnimplementedUnaryCall(getSetWriteSpeedMethod(), responseObserver); + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetWriteSpeedMethod(), responseObserver); } /** */ public void syncFromCloudVolume(org.opendedup.grpc.VolumeServiceOuterClass.SyncFromVolRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnimplementedUnaryCall(getSyncFromCloudVolumeMethod(), responseObserver); + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSyncFromCloudVolumeMethod(), responseObserver); } /** */ public void syncCloudVolume(org.opendedup.grpc.VolumeServiceOuterClass.SyncVolRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnimplementedUnaryCall(getSyncCloudVolumeMethod(), responseObserver); + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSyncCloudVolumeMethod(), responseObserver); } /** */ public void setMaxAge(org.opendedup.grpc.VolumeServiceOuterClass.SetMaxAgeRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnimplementedUnaryCall(getSetMaxAgeMethod(), responseObserver); + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetMaxAgeMethod(), responseObserver); } @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() { return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor()) .addMethod( getAuthenticateUserMethod(), - asyncUnaryCall( + io.grpc.stub.ServerCalls.asyncUnaryCall( new MethodHandlers< org.opendedup.grpc.VolumeServiceOuterClass.AuthenticationRequest, org.opendedup.grpc.VolumeServiceOuterClass.AuthenticationResponse>( this, METHODID_AUTHENTICATE_USER))) .addMethod( getGetVolumeInfoMethod(), - asyncUnaryCall( + io.grpc.stub.ServerCalls.asyncUnaryCall( new MethodHandlers< org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoRequest, org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoResponse>( this, METHODID_GET_VOLUME_INFO))) .addMethod( getShutdownVolumeMethod(), - asyncUnaryCall( + io.grpc.stub.ServerCalls.asyncUnaryCall( new MethodHandlers< org.opendedup.grpc.Shutdown.ShutdownRequest, org.opendedup.grpc.Shutdown.ShutdownResponse>( this, METHODID_SHUTDOWN_VOLUME))) .addMethod( getCleanStoreMethod(), - asyncUnaryCall( + io.grpc.stub.ServerCalls.asyncUnaryCall( new MethodHandlers< org.opendedup.grpc.VolumeServiceOuterClass.CleanStoreRequest, org.opendedup.grpc.VolumeServiceOuterClass.CleanStoreResponse>( this, METHODID_CLEAN_STORE))) .addMethod( getDeleteCloudVolumeMethod(), - asyncUnaryCall( + io.grpc.stub.ServerCalls.asyncUnaryCall( new MethodHandlers< org.opendedup.grpc.VolumeServiceOuterClass.DeleteCloudVolumeRequest, org.opendedup.grpc.VolumeServiceOuterClass.DeleteCloudVolumeResponse>( this, METHODID_DELETE_CLOUD_VOLUME))) .addMethod( getDSEInfoMethod(), - asyncUnaryCall( + io.grpc.stub.ServerCalls.asyncUnaryCall( new MethodHandlers< org.opendedup.grpc.VolumeServiceOuterClass.DSERequest, org.opendedup.grpc.VolumeServiceOuterClass.DSEResponse>( this, METHODID_DSEINFO))) .addMethod( getSystemInfoMethod(), - asyncUnaryCall( + io.grpc.stub.ServerCalls.asyncUnaryCall( new MethodHandlers< org.opendedup.grpc.VolumeServiceOuterClass.SystemInfoRequest, org.opendedup.grpc.VolumeServiceOuterClass.SystemInfoResponse>( this, METHODID_SYSTEM_INFO))) .addMethod( getSetVolumeCapacityMethod(), - asyncUnaryCall( + io.grpc.stub.ServerCalls.asyncUnaryCall( new MethodHandlers< org.opendedup.grpc.VolumeServiceOuterClass.SetVolumeCapacityRequest, org.opendedup.grpc.VolumeServiceOuterClass.SetVolumeCapacityResponse>( this, METHODID_SET_VOLUME_CAPACITY))) .addMethod( getGetConnectedVolumesMethod(), - asyncUnaryCall( + io.grpc.stub.ServerCalls.asyncUnaryCall( new MethodHandlers< org.opendedup.grpc.VolumeServiceOuterClass.CloudVolumesRequest, org.opendedup.grpc.VolumeServiceOuterClass.CloudVolumesResponse>( this, METHODID_GET_CONNECTED_VOLUMES))) .addMethod( getGetGCScheduleMethod(), - asyncUnaryCall( + io.grpc.stub.ServerCalls.asyncUnaryCall( new MethodHandlers< org.opendedup.grpc.VolumeServiceOuterClass.GCScheduleRequest, org.opendedup.grpc.VolumeServiceOuterClass.GCScheduleResponse>( this, METHODID_GET_GCSCHEDULE))) .addMethod( getSetCacheSizeMethod(), - asyncUnaryCall( + io.grpc.stub.ServerCalls.asyncUnaryCall( new MethodHandlers< org.opendedup.grpc.VolumeServiceOuterClass.SetCacheSizeRequest, org.opendedup.grpc.VolumeServiceOuterClass.SetCacheSizeResponse>( this, METHODID_SET_CACHE_SIZE))) .addMethod( getSetPasswordMethod(), - asyncUnaryCall( + io.grpc.stub.ServerCalls.asyncUnaryCall( new MethodHandlers< org.opendedup.grpc.VolumeServiceOuterClass.SetPasswordRequest, org.opendedup.grpc.VolumeServiceOuterClass.SetPasswordResponse>( this, METHODID_SET_PASSWORD))) .addMethod( getSetReadSpeedMethod(), - asyncUnaryCall( + io.grpc.stub.ServerCalls.asyncUnaryCall( new MethodHandlers< org.opendedup.grpc.VolumeServiceOuterClass.SpeedRequest, org.opendedup.grpc.VolumeServiceOuterClass.SpeedResponse>( this, METHODID_SET_READ_SPEED))) .addMethod( getSetWriteSpeedMethod(), - asyncUnaryCall( + io.grpc.stub.ServerCalls.asyncUnaryCall( new MethodHandlers< org.opendedup.grpc.VolumeServiceOuterClass.SpeedRequest, org.opendedup.grpc.VolumeServiceOuterClass.SpeedResponse>( this, METHODID_SET_WRITE_SPEED))) .addMethod( getSyncFromCloudVolumeMethod(), - asyncUnaryCall( + io.grpc.stub.ServerCalls.asyncUnaryCall( new MethodHandlers< org.opendedup.grpc.VolumeServiceOuterClass.SyncFromVolRequest, org.opendedup.grpc.VolumeServiceOuterClass.SyncFromVolResponse>( this, METHODID_SYNC_FROM_CLOUD_VOLUME))) .addMethod( getSyncCloudVolumeMethod(), - asyncUnaryCall( + io.grpc.stub.ServerCalls.asyncUnaryCall( new MethodHandlers< org.opendedup.grpc.VolumeServiceOuterClass.SyncVolRequest, org.opendedup.grpc.VolumeServiceOuterClass.SyncVolResponse>( this, METHODID_SYNC_CLOUD_VOLUME))) .addMethod( getSetMaxAgeMethod(), - asyncUnaryCall( + io.grpc.stub.ServerCalls.asyncUnaryCall( new MethodHandlers< org.opendedup.grpc.VolumeServiceOuterClass.SetMaxAgeRequest, org.opendedup.grpc.VolumeServiceOuterClass.SetMaxAgeResponse>( @@ -873,7 +861,7 @@ protected VolumeServiceStub build( */ public void authenticateUser(org.opendedup.grpc.VolumeServiceOuterClass.AuthenticationRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnaryCall( + io.grpc.stub.ClientCalls.asyncUnaryCall( getChannel().newCall(getAuthenticateUserMethod(), getCallOptions()), request, responseObserver); } @@ -881,7 +869,7 @@ public void authenticateUser(org.opendedup.grpc.VolumeServiceOuterClass.Authenti */ public void getVolumeInfo(org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnaryCall( + io.grpc.stub.ClientCalls.asyncUnaryCall( getChannel().newCall(getGetVolumeInfoMethod(), getCallOptions()), request, responseObserver); } @@ -889,7 +877,7 @@ public void getVolumeInfo(org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoR */ public void shutdownVolume(org.opendedup.grpc.Shutdown.ShutdownRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnaryCall( + io.grpc.stub.ClientCalls.asyncUnaryCall( getChannel().newCall(getShutdownVolumeMethod(), getCallOptions()), request, responseObserver); } @@ -897,7 +885,7 @@ public void shutdownVolume(org.opendedup.grpc.Shutdown.ShutdownRequest request, */ public void cleanStore(org.opendedup.grpc.VolumeServiceOuterClass.CleanStoreRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnaryCall( + io.grpc.stub.ClientCalls.asyncUnaryCall( getChannel().newCall(getCleanStoreMethod(), getCallOptions()), request, responseObserver); } @@ -905,7 +893,7 @@ public void cleanStore(org.opendedup.grpc.VolumeServiceOuterClass.CleanStoreRequ */ public void deleteCloudVolume(org.opendedup.grpc.VolumeServiceOuterClass.DeleteCloudVolumeRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnaryCall( + io.grpc.stub.ClientCalls.asyncUnaryCall( getChannel().newCall(getDeleteCloudVolumeMethod(), getCallOptions()), request, responseObserver); } @@ -913,7 +901,7 @@ public void deleteCloudVolume(org.opendedup.grpc.VolumeServiceOuterClass.DeleteC */ public void dSEInfo(org.opendedup.grpc.VolumeServiceOuterClass.DSERequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnaryCall( + io.grpc.stub.ClientCalls.asyncUnaryCall( getChannel().newCall(getDSEInfoMethod(), getCallOptions()), request, responseObserver); } @@ -921,7 +909,7 @@ public void dSEInfo(org.opendedup.grpc.VolumeServiceOuterClass.DSERequest reques */ public void systemInfo(org.opendedup.grpc.VolumeServiceOuterClass.SystemInfoRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnaryCall( + io.grpc.stub.ClientCalls.asyncUnaryCall( getChannel().newCall(getSystemInfoMethod(), getCallOptions()), request, responseObserver); } @@ -929,7 +917,7 @@ public void systemInfo(org.opendedup.grpc.VolumeServiceOuterClass.SystemInfoRequ */ public void setVolumeCapacity(org.opendedup.grpc.VolumeServiceOuterClass.SetVolumeCapacityRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnaryCall( + io.grpc.stub.ClientCalls.asyncUnaryCall( getChannel().newCall(getSetVolumeCapacityMethod(), getCallOptions()), request, responseObserver); } @@ -937,7 +925,7 @@ public void setVolumeCapacity(org.opendedup.grpc.VolumeServiceOuterClass.SetVolu */ public void getConnectedVolumes(org.opendedup.grpc.VolumeServiceOuterClass.CloudVolumesRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnaryCall( + io.grpc.stub.ClientCalls.asyncUnaryCall( getChannel().newCall(getGetConnectedVolumesMethod(), getCallOptions()), request, responseObserver); } @@ -945,7 +933,7 @@ public void getConnectedVolumes(org.opendedup.grpc.VolumeServiceOuterClass.Cloud */ public void getGCSchedule(org.opendedup.grpc.VolumeServiceOuterClass.GCScheduleRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnaryCall( + io.grpc.stub.ClientCalls.asyncUnaryCall( getChannel().newCall(getGetGCScheduleMethod(), getCallOptions()), request, responseObserver); } @@ -953,7 +941,7 @@ public void getGCSchedule(org.opendedup.grpc.VolumeServiceOuterClass.GCScheduleR */ public void setCacheSize(org.opendedup.grpc.VolumeServiceOuterClass.SetCacheSizeRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnaryCall( + io.grpc.stub.ClientCalls.asyncUnaryCall( getChannel().newCall(getSetCacheSizeMethod(), getCallOptions()), request, responseObserver); } @@ -961,7 +949,7 @@ public void setCacheSize(org.opendedup.grpc.VolumeServiceOuterClass.SetCacheSize */ public void setPassword(org.opendedup.grpc.VolumeServiceOuterClass.SetPasswordRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnaryCall( + io.grpc.stub.ClientCalls.asyncUnaryCall( getChannel().newCall(getSetPasswordMethod(), getCallOptions()), request, responseObserver); } @@ -969,7 +957,7 @@ public void setPassword(org.opendedup.grpc.VolumeServiceOuterClass.SetPasswordRe */ public void setReadSpeed(org.opendedup.grpc.VolumeServiceOuterClass.SpeedRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnaryCall( + io.grpc.stub.ClientCalls.asyncUnaryCall( getChannel().newCall(getSetReadSpeedMethod(), getCallOptions()), request, responseObserver); } @@ -977,7 +965,7 @@ public void setReadSpeed(org.opendedup.grpc.VolumeServiceOuterClass.SpeedRequest */ public void setWriteSpeed(org.opendedup.grpc.VolumeServiceOuterClass.SpeedRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnaryCall( + io.grpc.stub.ClientCalls.asyncUnaryCall( getChannel().newCall(getSetWriteSpeedMethod(), getCallOptions()), request, responseObserver); } @@ -985,7 +973,7 @@ public void setWriteSpeed(org.opendedup.grpc.VolumeServiceOuterClass.SpeedReques */ public void syncFromCloudVolume(org.opendedup.grpc.VolumeServiceOuterClass.SyncFromVolRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnaryCall( + io.grpc.stub.ClientCalls.asyncUnaryCall( getChannel().newCall(getSyncFromCloudVolumeMethod(), getCallOptions()), request, responseObserver); } @@ -993,7 +981,7 @@ public void syncFromCloudVolume(org.opendedup.grpc.VolumeServiceOuterClass.SyncF */ public void syncCloudVolume(org.opendedup.grpc.VolumeServiceOuterClass.SyncVolRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnaryCall( + io.grpc.stub.ClientCalls.asyncUnaryCall( getChannel().newCall(getSyncCloudVolumeMethod(), getCallOptions()), request, responseObserver); } @@ -1001,7 +989,7 @@ public void syncCloudVolume(org.opendedup.grpc.VolumeServiceOuterClass.SyncVolRe */ public void setMaxAge(org.opendedup.grpc.VolumeServiceOuterClass.SetMaxAgeRequest request, io.grpc.stub.StreamObserver responseObserver) { - asyncUnaryCall( + io.grpc.stub.ClientCalls.asyncUnaryCall( getChannel().newCall(getSetMaxAgeMethod(), getCallOptions()), request, responseObserver); } } @@ -1026,119 +1014,119 @@ protected VolumeServiceBlockingStub build( /** */ public org.opendedup.grpc.VolumeServiceOuterClass.AuthenticationResponse authenticateUser(org.opendedup.grpc.VolumeServiceOuterClass.AuthenticationRequest request) { - return blockingUnaryCall( + return io.grpc.stub.ClientCalls.blockingUnaryCall( getChannel(), getAuthenticateUserMethod(), getCallOptions(), request); } /** */ public org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoResponse getVolumeInfo(org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoRequest request) { - return blockingUnaryCall( + return io.grpc.stub.ClientCalls.blockingUnaryCall( getChannel(), getGetVolumeInfoMethod(), getCallOptions(), request); } /** */ public org.opendedup.grpc.Shutdown.ShutdownResponse shutdownVolume(org.opendedup.grpc.Shutdown.ShutdownRequest request) { - return blockingUnaryCall( + return io.grpc.stub.ClientCalls.blockingUnaryCall( getChannel(), getShutdownVolumeMethod(), getCallOptions(), request); } /** */ public org.opendedup.grpc.VolumeServiceOuterClass.CleanStoreResponse cleanStore(org.opendedup.grpc.VolumeServiceOuterClass.CleanStoreRequest request) { - return blockingUnaryCall( + return io.grpc.stub.ClientCalls.blockingUnaryCall( getChannel(), getCleanStoreMethod(), getCallOptions(), request); } /** */ public org.opendedup.grpc.VolumeServiceOuterClass.DeleteCloudVolumeResponse deleteCloudVolume(org.opendedup.grpc.VolumeServiceOuterClass.DeleteCloudVolumeRequest request) { - return blockingUnaryCall( + return io.grpc.stub.ClientCalls.blockingUnaryCall( getChannel(), getDeleteCloudVolumeMethod(), getCallOptions(), request); } /** */ public org.opendedup.grpc.VolumeServiceOuterClass.DSEResponse dSEInfo(org.opendedup.grpc.VolumeServiceOuterClass.DSERequest request) { - return blockingUnaryCall( + return io.grpc.stub.ClientCalls.blockingUnaryCall( getChannel(), getDSEInfoMethod(), getCallOptions(), request); } /** */ public org.opendedup.grpc.VolumeServiceOuterClass.SystemInfoResponse systemInfo(org.opendedup.grpc.VolumeServiceOuterClass.SystemInfoRequest request) { - return blockingUnaryCall( + return io.grpc.stub.ClientCalls.blockingUnaryCall( getChannel(), getSystemInfoMethod(), getCallOptions(), request); } /** */ public org.opendedup.grpc.VolumeServiceOuterClass.SetVolumeCapacityResponse setVolumeCapacity(org.opendedup.grpc.VolumeServiceOuterClass.SetVolumeCapacityRequest request) { - return blockingUnaryCall( + return io.grpc.stub.ClientCalls.blockingUnaryCall( getChannel(), getSetVolumeCapacityMethod(), getCallOptions(), request); } /** */ public org.opendedup.grpc.VolumeServiceOuterClass.CloudVolumesResponse getConnectedVolumes(org.opendedup.grpc.VolumeServiceOuterClass.CloudVolumesRequest request) { - return blockingUnaryCall( + return io.grpc.stub.ClientCalls.blockingUnaryCall( getChannel(), getGetConnectedVolumesMethod(), getCallOptions(), request); } /** */ public org.opendedup.grpc.VolumeServiceOuterClass.GCScheduleResponse getGCSchedule(org.opendedup.grpc.VolumeServiceOuterClass.GCScheduleRequest request) { - return blockingUnaryCall( + return io.grpc.stub.ClientCalls.blockingUnaryCall( getChannel(), getGetGCScheduleMethod(), getCallOptions(), request); } /** */ public org.opendedup.grpc.VolumeServiceOuterClass.SetCacheSizeResponse setCacheSize(org.opendedup.grpc.VolumeServiceOuterClass.SetCacheSizeRequest request) { - return blockingUnaryCall( + return io.grpc.stub.ClientCalls.blockingUnaryCall( getChannel(), getSetCacheSizeMethod(), getCallOptions(), request); } /** */ public org.opendedup.grpc.VolumeServiceOuterClass.SetPasswordResponse setPassword(org.opendedup.grpc.VolumeServiceOuterClass.SetPasswordRequest request) { - return blockingUnaryCall( + return io.grpc.stub.ClientCalls.blockingUnaryCall( getChannel(), getSetPasswordMethod(), getCallOptions(), request); } /** */ public org.opendedup.grpc.VolumeServiceOuterClass.SpeedResponse setReadSpeed(org.opendedup.grpc.VolumeServiceOuterClass.SpeedRequest request) { - return blockingUnaryCall( + return io.grpc.stub.ClientCalls.blockingUnaryCall( getChannel(), getSetReadSpeedMethod(), getCallOptions(), request); } /** */ public org.opendedup.grpc.VolumeServiceOuterClass.SpeedResponse setWriteSpeed(org.opendedup.grpc.VolumeServiceOuterClass.SpeedRequest request) { - return blockingUnaryCall( + return io.grpc.stub.ClientCalls.blockingUnaryCall( getChannel(), getSetWriteSpeedMethod(), getCallOptions(), request); } /** */ public org.opendedup.grpc.VolumeServiceOuterClass.SyncFromVolResponse syncFromCloudVolume(org.opendedup.grpc.VolumeServiceOuterClass.SyncFromVolRequest request) { - return blockingUnaryCall( + return io.grpc.stub.ClientCalls.blockingUnaryCall( getChannel(), getSyncFromCloudVolumeMethod(), getCallOptions(), request); } /** */ public org.opendedup.grpc.VolumeServiceOuterClass.SyncVolResponse syncCloudVolume(org.opendedup.grpc.VolumeServiceOuterClass.SyncVolRequest request) { - return blockingUnaryCall( + return io.grpc.stub.ClientCalls.blockingUnaryCall( getChannel(), getSyncCloudVolumeMethod(), getCallOptions(), request); } /** */ public org.opendedup.grpc.VolumeServiceOuterClass.SetMaxAgeResponse setMaxAge(org.opendedup.grpc.VolumeServiceOuterClass.SetMaxAgeRequest request) { - return blockingUnaryCall( + return io.grpc.stub.ClientCalls.blockingUnaryCall( getChannel(), getSetMaxAgeMethod(), getCallOptions(), request); } } @@ -1164,7 +1152,7 @@ protected VolumeServiceFutureStub build( */ public com.google.common.util.concurrent.ListenableFuture authenticateUser( org.opendedup.grpc.VolumeServiceOuterClass.AuthenticationRequest request) { - return futureUnaryCall( + return io.grpc.stub.ClientCalls.futureUnaryCall( getChannel().newCall(getAuthenticateUserMethod(), getCallOptions()), request); } @@ -1172,7 +1160,7 @@ public com.google.common.util.concurrent.ListenableFuture getVolumeInfo( org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoRequest request) { - return futureUnaryCall( + return io.grpc.stub.ClientCalls.futureUnaryCall( getChannel().newCall(getGetVolumeInfoMethod(), getCallOptions()), request); } @@ -1180,7 +1168,7 @@ public com.google.common.util.concurrent.ListenableFuture shutdownVolume( org.opendedup.grpc.Shutdown.ShutdownRequest request) { - return futureUnaryCall( + return io.grpc.stub.ClientCalls.futureUnaryCall( getChannel().newCall(getShutdownVolumeMethod(), getCallOptions()), request); } @@ -1188,7 +1176,7 @@ public com.google.common.util.concurrent.ListenableFuture cleanStore( org.opendedup.grpc.VolumeServiceOuterClass.CleanStoreRequest request) { - return futureUnaryCall( + return io.grpc.stub.ClientCalls.futureUnaryCall( getChannel().newCall(getCleanStoreMethod(), getCallOptions()), request); } @@ -1196,7 +1184,7 @@ public com.google.common.util.concurrent.ListenableFuture deleteCloudVolume( org.opendedup.grpc.VolumeServiceOuterClass.DeleteCloudVolumeRequest request) { - return futureUnaryCall( + return io.grpc.stub.ClientCalls.futureUnaryCall( getChannel().newCall(getDeleteCloudVolumeMethod(), getCallOptions()), request); } @@ -1204,7 +1192,7 @@ public com.google.common.util.concurrent.ListenableFuture dSEInfo( org.opendedup.grpc.VolumeServiceOuterClass.DSERequest request) { - return futureUnaryCall( + return io.grpc.stub.ClientCalls.futureUnaryCall( getChannel().newCall(getDSEInfoMethod(), getCallOptions()), request); } @@ -1212,7 +1200,7 @@ public com.google.common.util.concurrent.ListenableFuture systemInfo( org.opendedup.grpc.VolumeServiceOuterClass.SystemInfoRequest request) { - return futureUnaryCall( + return io.grpc.stub.ClientCalls.futureUnaryCall( getChannel().newCall(getSystemInfoMethod(), getCallOptions()), request); } @@ -1220,7 +1208,7 @@ public com.google.common.util.concurrent.ListenableFuture setVolumeCapacity( org.opendedup.grpc.VolumeServiceOuterClass.SetVolumeCapacityRequest request) { - return futureUnaryCall( + return io.grpc.stub.ClientCalls.futureUnaryCall( getChannel().newCall(getSetVolumeCapacityMethod(), getCallOptions()), request); } @@ -1228,7 +1216,7 @@ public com.google.common.util.concurrent.ListenableFuture getConnectedVolumes( org.opendedup.grpc.VolumeServiceOuterClass.CloudVolumesRequest request) { - return futureUnaryCall( + return io.grpc.stub.ClientCalls.futureUnaryCall( getChannel().newCall(getGetConnectedVolumesMethod(), getCallOptions()), request); } @@ -1236,7 +1224,7 @@ public com.google.common.util.concurrent.ListenableFuture getGCSchedule( org.opendedup.grpc.VolumeServiceOuterClass.GCScheduleRequest request) { - return futureUnaryCall( + return io.grpc.stub.ClientCalls.futureUnaryCall( getChannel().newCall(getGetGCScheduleMethod(), getCallOptions()), request); } @@ -1244,7 +1232,7 @@ public com.google.common.util.concurrent.ListenableFuture setCacheSize( org.opendedup.grpc.VolumeServiceOuterClass.SetCacheSizeRequest request) { - return futureUnaryCall( + return io.grpc.stub.ClientCalls.futureUnaryCall( getChannel().newCall(getSetCacheSizeMethod(), getCallOptions()), request); } @@ -1252,7 +1240,7 @@ public com.google.common.util.concurrent.ListenableFuture setPassword( org.opendedup.grpc.VolumeServiceOuterClass.SetPasswordRequest request) { - return futureUnaryCall( + return io.grpc.stub.ClientCalls.futureUnaryCall( getChannel().newCall(getSetPasswordMethod(), getCallOptions()), request); } @@ -1260,7 +1248,7 @@ public com.google.common.util.concurrent.ListenableFuture setReadSpeed( org.opendedup.grpc.VolumeServiceOuterClass.SpeedRequest request) { - return futureUnaryCall( + return io.grpc.stub.ClientCalls.futureUnaryCall( getChannel().newCall(getSetReadSpeedMethod(), getCallOptions()), request); } @@ -1268,7 +1256,7 @@ public com.google.common.util.concurrent.ListenableFuture setWriteSpeed( org.opendedup.grpc.VolumeServiceOuterClass.SpeedRequest request) { - return futureUnaryCall( + return io.grpc.stub.ClientCalls.futureUnaryCall( getChannel().newCall(getSetWriteSpeedMethod(), getCallOptions()), request); } @@ -1276,7 +1264,7 @@ public com.google.common.util.concurrent.ListenableFuture syncFromCloudVolume( org.opendedup.grpc.VolumeServiceOuterClass.SyncFromVolRequest request) { - return futureUnaryCall( + return io.grpc.stub.ClientCalls.futureUnaryCall( getChannel().newCall(getSyncFromCloudVolumeMethod(), getCallOptions()), request); } @@ -1284,7 +1272,7 @@ public com.google.common.util.concurrent.ListenableFuture syncCloudVolume( org.opendedup.grpc.VolumeServiceOuterClass.SyncVolRequest request) { - return futureUnaryCall( + return io.grpc.stub.ClientCalls.futureUnaryCall( getChannel().newCall(getSyncCloudVolumeMethod(), getCallOptions()), request); } @@ -1292,7 +1280,7 @@ public com.google.common.util.concurrent.ListenableFuture setMaxAge( org.opendedup.grpc.VolumeServiceOuterClass.SetMaxAgeRequest request) { - return futureUnaryCall( + return io.grpc.stub.ClientCalls.futureUnaryCall( getChannel().newCall(getSetMaxAgeMethod(), getCallOptions()), request); } } diff --git a/src/org/opendedup/grpc/VolumeServiceOuterClass.java b/src/org/opendedup/grpc/VolumeServiceOuterClass.java index 6b8004baf..196717ab3 100644 --- a/src/org/opendedup/grpc/VolumeServiceOuterClass.java +++ b/src/org/opendedup/grpc/VolumeServiceOuterClass.java @@ -17,6 +17,12 @@ public static void registerAllExtensions( public interface VolumeInfoRequestOrBuilder extends // @@protoc_insertion_point(interface_extends:org.opendedup.grpc.VolumeInfoRequest) com.google.protobuf.MessageOrBuilder { + + /** + * int64 pvolumeID = 1; + * @return The pvolumeID. + */ + long getPvolumeID(); } /** *
@@ -67,6 +73,11 @@ private VolumeInfoRequest(
             case 0:
               done = true;
               break;
+            case 8: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -99,6 +110,17 @@ private VolumeInfoRequest(
               org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoRequest.class, org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoRequest.Builder.class);
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 1;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 1;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -113,6 +135,9 @@ public final boolean isInitialized() {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(1, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -122,6 +147,10 @@ public int getSerializedSize() {
       if (size != -1) return size;
 
       size = 0;
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(1, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -137,6 +166,8 @@ public boolean equals(final java.lang.Object obj) {
       }
       org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoRequest other = (org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoRequest) obj;
 
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -148,6 +179,9 @@ public int hashCode() {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -285,6 +319,8 @@ private void maybeForceBuilderInitialization() {
       @java.lang.Override
       public Builder clear() {
         super.clear();
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -311,6 +347,7 @@ public org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoRequest build() {
       @java.lang.Override
       public org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoRequest buildPartial() {
         org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoRequest result = new org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoRequest(this);
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -359,6 +396,9 @@ public Builder mergeFrom(com.google.protobuf.Message other) {
 
       public Builder mergeFrom(org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoRequest other) {
         if (other == org.opendedup.grpc.VolumeServiceOuterClass.VolumeInfoRequest.getDefaultInstance()) return this;
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -387,6 +427,37 @@ public Builder mergeFrom(
         }
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 1;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 1;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 1;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -4929,6 +5000,12 @@ public org.opendedup.grpc.VolumeServiceOuterClass.SystemInfo getDefaultInstanceF
   public interface SystemInfoRequestOrBuilder extends
       // @@protoc_insertion_point(interface_extends:org.opendedup.grpc.SystemInfoRequest)
       com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * int64 pvolumeID = 1;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.SystemInfoRequest}
@@ -4975,6 +5052,11 @@ private SystemInfoRequest(
             case 0:
               done = true;
               break;
+            case 8: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -5007,6 +5089,17 @@ private SystemInfoRequest(
               org.opendedup.grpc.VolumeServiceOuterClass.SystemInfoRequest.class, org.opendedup.grpc.VolumeServiceOuterClass.SystemInfoRequest.Builder.class);
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 1;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 1;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -5021,6 +5114,9 @@ public final boolean isInitialized() {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(1, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -5030,6 +5126,10 @@ public int getSerializedSize() {
       if (size != -1) return size;
 
       size = 0;
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(1, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -5045,6 +5145,8 @@ public boolean equals(final java.lang.Object obj) {
       }
       org.opendedup.grpc.VolumeServiceOuterClass.SystemInfoRequest other = (org.opendedup.grpc.VolumeServiceOuterClass.SystemInfoRequest) obj;
 
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -5056,6 +5158,9 @@ public int hashCode() {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -5189,6 +5294,8 @@ private void maybeForceBuilderInitialization() {
       @java.lang.Override
       public Builder clear() {
         super.clear();
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -5215,6 +5322,7 @@ public org.opendedup.grpc.VolumeServiceOuterClass.SystemInfoRequest build() {
       @java.lang.Override
       public org.opendedup.grpc.VolumeServiceOuterClass.SystemInfoRequest buildPartial() {
         org.opendedup.grpc.VolumeServiceOuterClass.SystemInfoRequest result = new org.opendedup.grpc.VolumeServiceOuterClass.SystemInfoRequest(this);
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -5263,6 +5371,9 @@ public Builder mergeFrom(com.google.protobuf.Message other) {
 
       public Builder mergeFrom(org.opendedup.grpc.VolumeServiceOuterClass.SystemInfoRequest other) {
         if (other == org.opendedup.grpc.VolumeServiceOuterClass.SystemInfoRequest.getDefaultInstance()) return this;
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -5291,6 +5402,37 @@ public Builder mergeFrom(
         }
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 1;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 1;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 1;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -6560,6 +6702,12 @@ public org.opendedup.grpc.VolumeServiceOuterClass.ConnectedVolumeInfo getDefault
   public interface GCScheduleRequestOrBuilder extends
       // @@protoc_insertion_point(interface_extends:org.opendedup.grpc.GCScheduleRequest)
       com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * int64 pvolumeID = 1;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.GCScheduleRequest}
@@ -6606,6 +6754,11 @@ private GCScheduleRequest(
             case 0:
               done = true;
               break;
+            case 8: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -6638,6 +6791,17 @@ private GCScheduleRequest(
               org.opendedup.grpc.VolumeServiceOuterClass.GCScheduleRequest.class, org.opendedup.grpc.VolumeServiceOuterClass.GCScheduleRequest.Builder.class);
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 1;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 1;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -6652,6 +6816,9 @@ public final boolean isInitialized() {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(1, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -6661,6 +6828,10 @@ public int getSerializedSize() {
       if (size != -1) return size;
 
       size = 0;
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(1, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -6676,6 +6847,8 @@ public boolean equals(final java.lang.Object obj) {
       }
       org.opendedup.grpc.VolumeServiceOuterClass.GCScheduleRequest other = (org.opendedup.grpc.VolumeServiceOuterClass.GCScheduleRequest) obj;
 
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -6687,6 +6860,9 @@ public int hashCode() {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -6820,6 +6996,8 @@ private void maybeForceBuilderInitialization() {
       @java.lang.Override
       public Builder clear() {
         super.clear();
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -6846,6 +7024,7 @@ public org.opendedup.grpc.VolumeServiceOuterClass.GCScheduleRequest build() {
       @java.lang.Override
       public org.opendedup.grpc.VolumeServiceOuterClass.GCScheduleRequest buildPartial() {
         org.opendedup.grpc.VolumeServiceOuterClass.GCScheduleRequest result = new org.opendedup.grpc.VolumeServiceOuterClass.GCScheduleRequest(this);
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -6894,6 +7073,9 @@ public Builder mergeFrom(com.google.protobuf.Message other) {
 
       public Builder mergeFrom(org.opendedup.grpc.VolumeServiceOuterClass.GCScheduleRequest other) {
         if (other == org.opendedup.grpc.VolumeServiceOuterClass.GCScheduleRequest.getDefaultInstance()) return this;
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -6922,6 +7104,37 @@ public Builder mergeFrom(
         }
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 1;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 1;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 1;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -7803,6 +8016,12 @@ public org.opendedup.grpc.VolumeServiceOuterClass.GCScheduleResponse getDefaultI
   public interface CloudVolumesRequestOrBuilder extends
       // @@protoc_insertion_point(interface_extends:org.opendedup.grpc.CloudVolumesRequest)
       com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * int64 pvolumeID = 1;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.CloudVolumesRequest}
@@ -7849,6 +8068,11 @@ private CloudVolumesRequest(
             case 0:
               done = true;
               break;
+            case 8: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -7881,6 +8105,17 @@ private CloudVolumesRequest(
               org.opendedup.grpc.VolumeServiceOuterClass.CloudVolumesRequest.class, org.opendedup.grpc.VolumeServiceOuterClass.CloudVolumesRequest.Builder.class);
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 1;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 1;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -7895,6 +8130,9 @@ public final boolean isInitialized() {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(1, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -7904,6 +8142,10 @@ public int getSerializedSize() {
       if (size != -1) return size;
 
       size = 0;
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(1, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -7919,6 +8161,8 @@ public boolean equals(final java.lang.Object obj) {
       }
       org.opendedup.grpc.VolumeServiceOuterClass.CloudVolumesRequest other = (org.opendedup.grpc.VolumeServiceOuterClass.CloudVolumesRequest) obj;
 
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -7930,6 +8174,9 @@ public int hashCode() {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -8063,6 +8310,8 @@ private void maybeForceBuilderInitialization() {
       @java.lang.Override
       public Builder clear() {
         super.clear();
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -8089,6 +8338,7 @@ public org.opendedup.grpc.VolumeServiceOuterClass.CloudVolumesRequest build() {
       @java.lang.Override
       public org.opendedup.grpc.VolumeServiceOuterClass.CloudVolumesRequest buildPartial() {
         org.opendedup.grpc.VolumeServiceOuterClass.CloudVolumesRequest result = new org.opendedup.grpc.VolumeServiceOuterClass.CloudVolumesRequest(this);
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -8137,6 +8387,9 @@ public Builder mergeFrom(com.google.protobuf.Message other) {
 
       public Builder mergeFrom(org.opendedup.grpc.VolumeServiceOuterClass.CloudVolumesRequest other) {
         if (other == org.opendedup.grpc.VolumeServiceOuterClass.CloudVolumesRequest.getDefaultInstance()) return this;
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -8165,6 +8418,37 @@ public Builder mergeFrom(
         }
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 1;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 1;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 1;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -10311,6 +10595,78 @@ public interface DSEInfoOrBuilder extends
      * @return The maxAge.
      */
     long getMaxAge();
+
+    /**
+     * double averageLoadPenalty = 21;
+     * @return The averageLoadPenalty.
+     */
+    double getAverageLoadPenalty();
+
+    /**
+     * int64 evictionCount = 22;
+     * @return The evictionCount.
+     */
+    long getEvictionCount();
+
+    /**
+     * int64 hitCount = 23;
+     * @return The hitCount.
+     */
+    long getHitCount();
+
+    /**
+     * double hitRate = 24;
+     * @return The hitRate.
+     */
+    double getHitRate();
+
+    /**
+     * int64 loadCount = 25;
+     * @return The loadCount.
+     */
+    long getLoadCount();
+
+    /**
+     * int64 loadExceptionCount = 26;
+     * @return The loadExceptionCount.
+     */
+    long getLoadExceptionCount();
+
+    /**
+     * double loadExceptionRate = 27;
+     * @return The loadExceptionRate.
+     */
+    double getLoadExceptionRate();
+
+    /**
+     * int64 loadSuccessCount = 28;
+     * @return The loadSuccessCount.
+     */
+    long getLoadSuccessCount();
+
+    /**
+     * int64 missCount = 29;
+     * @return The missCount.
+     */
+    long getMissCount();
+
+    /**
+     * double missRate = 30;
+     * @return The missRate.
+     */
+    double getMissRate();
+
+    /**
+     * int64 requestCount = 31;
+     * @return The requestCount.
+     */
+    long getRequestCount();
+
+    /**
+     * int64 totalLoadTime = 32;
+     * @return The totalLoadTime.
+     */
+    long getTotalLoadTime();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.DSEInfo}
@@ -10471,6 +10827,66 @@ private DSEInfo(
               maxAge_ = input.readInt64();
               break;
             }
+            case 169: {
+
+              averageLoadPenalty_ = input.readDouble();
+              break;
+            }
+            case 176: {
+
+              evictionCount_ = input.readInt64();
+              break;
+            }
+            case 184: {
+
+              hitCount_ = input.readInt64();
+              break;
+            }
+            case 193: {
+
+              hitRate_ = input.readDouble();
+              break;
+            }
+            case 200: {
+
+              loadCount_ = input.readInt64();
+              break;
+            }
+            case 208: {
+
+              loadExceptionCount_ = input.readInt64();
+              break;
+            }
+            case 217: {
+
+              loadExceptionRate_ = input.readDouble();
+              break;
+            }
+            case 224: {
+
+              loadSuccessCount_ = input.readInt64();
+              break;
+            }
+            case 232: {
+
+              missCount_ = input.readInt64();
+              break;
+            }
+            case 241: {
+
+              missRate_ = input.readDouble();
+              break;
+            }
+            case 248: {
+
+              requestCount_ = input.readInt64();
+              break;
+            }
+            case 256: {
+
+              totalLoadTime_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -10912,33 +11328,165 @@ public long getMaxAge() {
       return maxAge_;
     }
 
-    private byte memoizedIsInitialized = -1;
+    public static final int AVERAGELOADPENALTY_FIELD_NUMBER = 21;
+    private double averageLoadPenalty_;
+    /**
+     * double averageLoadPenalty = 21;
+     * @return The averageLoadPenalty.
+     */
     @java.lang.Override
-    public final boolean isInitialized() {
-      byte isInitialized = memoizedIsInitialized;
-      if (isInitialized == 1) return true;
-      if (isInitialized == 0) return false;
+    public double getAverageLoadPenalty() {
+      return averageLoadPenalty_;
+    }
 
-      memoizedIsInitialized = 1;
-      return true;
+    public static final int EVICTIONCOUNT_FIELD_NUMBER = 22;
+    private long evictionCount_;
+    /**
+     * int64 evictionCount = 22;
+     * @return The evictionCount.
+     */
+    @java.lang.Override
+    public long getEvictionCount() {
+      return evictionCount_;
     }
 
+    public static final int HITCOUNT_FIELD_NUMBER = 23;
+    private long hitCount_;
+    /**
+     * int64 hitCount = 23;
+     * @return The hitCount.
+     */
     @java.lang.Override
-    public void writeTo(com.google.protobuf.CodedOutputStream output)
-                        throws java.io.IOException {
-      if (maxSize_ != 0L) {
-        output.writeInt64(1, maxSize_);
-      }
-      if (currentSize_ != 0L) {
-        output.writeInt64(2, currentSize_);
-      }
-      if (entries_ != 0L) {
-        output.writeInt64(3, entries_);
-      }
-      if (compressedSize_ != 0L) {
-        output.writeInt64(4, compressedSize_);
-      }
-      if (freeBlocks_ != 0L) {
+    public long getHitCount() {
+      return hitCount_;
+    }
+
+    public static final int HITRATE_FIELD_NUMBER = 24;
+    private double hitRate_;
+    /**
+     * double hitRate = 24;
+     * @return The hitRate.
+     */
+    @java.lang.Override
+    public double getHitRate() {
+      return hitRate_;
+    }
+
+    public static final int LOADCOUNT_FIELD_NUMBER = 25;
+    private long loadCount_;
+    /**
+     * int64 loadCount = 25;
+     * @return The loadCount.
+     */
+    @java.lang.Override
+    public long getLoadCount() {
+      return loadCount_;
+    }
+
+    public static final int LOADEXCEPTIONCOUNT_FIELD_NUMBER = 26;
+    private long loadExceptionCount_;
+    /**
+     * int64 loadExceptionCount = 26;
+     * @return The loadExceptionCount.
+     */
+    @java.lang.Override
+    public long getLoadExceptionCount() {
+      return loadExceptionCount_;
+    }
+
+    public static final int LOADEXCEPTIONRATE_FIELD_NUMBER = 27;
+    private double loadExceptionRate_;
+    /**
+     * double loadExceptionRate = 27;
+     * @return The loadExceptionRate.
+     */
+    @java.lang.Override
+    public double getLoadExceptionRate() {
+      return loadExceptionRate_;
+    }
+
+    public static final int LOADSUCCESSCOUNT_FIELD_NUMBER = 28;
+    private long loadSuccessCount_;
+    /**
+     * int64 loadSuccessCount = 28;
+     * @return The loadSuccessCount.
+     */
+    @java.lang.Override
+    public long getLoadSuccessCount() {
+      return loadSuccessCount_;
+    }
+
+    public static final int MISSCOUNT_FIELD_NUMBER = 29;
+    private long missCount_;
+    /**
+     * int64 missCount = 29;
+     * @return The missCount.
+     */
+    @java.lang.Override
+    public long getMissCount() {
+      return missCount_;
+    }
+
+    public static final int MISSRATE_FIELD_NUMBER = 30;
+    private double missRate_;
+    /**
+     * double missRate = 30;
+     * @return The missRate.
+     */
+    @java.lang.Override
+    public double getMissRate() {
+      return missRate_;
+    }
+
+    public static final int REQUESTCOUNT_FIELD_NUMBER = 31;
+    private long requestCount_;
+    /**
+     * int64 requestCount = 31;
+     * @return The requestCount.
+     */
+    @java.lang.Override
+    public long getRequestCount() {
+      return requestCount_;
+    }
+
+    public static final int TOTALLOADTIME_FIELD_NUMBER = 32;
+    private long totalLoadTime_;
+    /**
+     * int64 totalLoadTime = 32;
+     * @return The totalLoadTime.
+     */
+    @java.lang.Override
+    public long getTotalLoadTime() {
+      return totalLoadTime_;
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (maxSize_ != 0L) {
+        output.writeInt64(1, maxSize_);
+      }
+      if (currentSize_ != 0L) {
+        output.writeInt64(2, currentSize_);
+      }
+      if (entries_ != 0L) {
+        output.writeInt64(3, entries_);
+      }
+      if (compressedSize_ != 0L) {
+        output.writeInt64(4, compressedSize_);
+      }
+      if (freeBlocks_ != 0L) {
         output.writeInt64(5, freeBlocks_);
       }
       if (pageSize_ != 0L) {
@@ -10986,6 +11534,42 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (maxAge_ != 0L) {
         output.writeInt64(20, maxAge_);
       }
+      if (averageLoadPenalty_ != 0D) {
+        output.writeDouble(21, averageLoadPenalty_);
+      }
+      if (evictionCount_ != 0L) {
+        output.writeInt64(22, evictionCount_);
+      }
+      if (hitCount_ != 0L) {
+        output.writeInt64(23, hitCount_);
+      }
+      if (hitRate_ != 0D) {
+        output.writeDouble(24, hitRate_);
+      }
+      if (loadCount_ != 0L) {
+        output.writeInt64(25, loadCount_);
+      }
+      if (loadExceptionCount_ != 0L) {
+        output.writeInt64(26, loadExceptionCount_);
+      }
+      if (loadExceptionRate_ != 0D) {
+        output.writeDouble(27, loadExceptionRate_);
+      }
+      if (loadSuccessCount_ != 0L) {
+        output.writeInt64(28, loadSuccessCount_);
+      }
+      if (missCount_ != 0L) {
+        output.writeInt64(29, missCount_);
+      }
+      if (missRate_ != 0D) {
+        output.writeDouble(30, missRate_);
+      }
+      if (requestCount_ != 0L) {
+        output.writeInt64(31, requestCount_);
+      }
+      if (totalLoadTime_ != 0L) {
+        output.writeInt64(32, totalLoadTime_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -11068,6 +11652,54 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeInt64Size(20, maxAge_);
       }
+      if (averageLoadPenalty_ != 0D) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeDoubleSize(21, averageLoadPenalty_);
+      }
+      if (evictionCount_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(22, evictionCount_);
+      }
+      if (hitCount_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(23, hitCount_);
+      }
+      if (hitRate_ != 0D) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeDoubleSize(24, hitRate_);
+      }
+      if (loadCount_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(25, loadCount_);
+      }
+      if (loadExceptionCount_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(26, loadExceptionCount_);
+      }
+      if (loadExceptionRate_ != 0D) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeDoubleSize(27, loadExceptionRate_);
+      }
+      if (loadSuccessCount_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(28, loadSuccessCount_);
+      }
+      if (missCount_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(29, missCount_);
+      }
+      if (missRate_ != 0D) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeDoubleSize(30, missRate_);
+      }
+      if (requestCount_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(31, requestCount_);
+      }
+      if (totalLoadTime_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(32, totalLoadTime_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -11123,6 +11755,34 @@ public boolean equals(final java.lang.Object obj) {
           .equals(other.getBucketName())) return false;
       if (getMaxAge()
           != other.getMaxAge()) return false;
+      if (java.lang.Double.doubleToLongBits(getAverageLoadPenalty())
+          != java.lang.Double.doubleToLongBits(
+              other.getAverageLoadPenalty())) return false;
+      if (getEvictionCount()
+          != other.getEvictionCount()) return false;
+      if (getHitCount()
+          != other.getHitCount()) return false;
+      if (java.lang.Double.doubleToLongBits(getHitRate())
+          != java.lang.Double.doubleToLongBits(
+              other.getHitRate())) return false;
+      if (getLoadCount()
+          != other.getLoadCount()) return false;
+      if (getLoadExceptionCount()
+          != other.getLoadExceptionCount()) return false;
+      if (java.lang.Double.doubleToLongBits(getLoadExceptionRate())
+          != java.lang.Double.doubleToLongBits(
+              other.getLoadExceptionRate())) return false;
+      if (getLoadSuccessCount()
+          != other.getLoadSuccessCount()) return false;
+      if (getMissCount()
+          != other.getMissCount()) return false;
+      if (java.lang.Double.doubleToLongBits(getMissRate())
+          != java.lang.Double.doubleToLongBits(
+              other.getMissRate())) return false;
+      if (getRequestCount()
+          != other.getRequestCount()) return false;
+      if (getTotalLoadTime()
+          != other.getTotalLoadTime()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -11184,6 +11844,42 @@ public int hashCode() {
       hash = (37 * hash) + MAXAGE_FIELD_NUMBER;
       hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
           getMaxAge());
+      hash = (37 * hash) + AVERAGELOADPENALTY_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          java.lang.Double.doubleToLongBits(getAverageLoadPenalty()));
+      hash = (37 * hash) + EVICTIONCOUNT_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getEvictionCount());
+      hash = (37 * hash) + HITCOUNT_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getHitCount());
+      hash = (37 * hash) + HITRATE_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          java.lang.Double.doubleToLongBits(getHitRate()));
+      hash = (37 * hash) + LOADCOUNT_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getLoadCount());
+      hash = (37 * hash) + LOADEXCEPTIONCOUNT_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getLoadExceptionCount());
+      hash = (37 * hash) + LOADEXCEPTIONRATE_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          java.lang.Double.doubleToLongBits(getLoadExceptionRate()));
+      hash = (37 * hash) + LOADSUCCESSCOUNT_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getLoadSuccessCount());
+      hash = (37 * hash) + MISSCOUNT_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getMissCount());
+      hash = (37 * hash) + MISSRATE_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          java.lang.Double.doubleToLongBits(getMissRate()));
+      hash = (37 * hash) + REQUESTCOUNT_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getRequestCount());
+      hash = (37 * hash) + TOTALLOADTIME_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getTotalLoadTime());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -11357,6 +12053,30 @@ public Builder clear() {
 
         maxAge_ = 0L;
 
+        averageLoadPenalty_ = 0D;
+
+        evictionCount_ = 0L;
+
+        hitCount_ = 0L;
+
+        hitRate_ = 0D;
+
+        loadCount_ = 0L;
+
+        loadExceptionCount_ = 0L;
+
+        loadExceptionRate_ = 0D;
+
+        loadSuccessCount_ = 0L;
+
+        missCount_ = 0L;
+
+        missRate_ = 0D;
+
+        requestCount_ = 0L;
+
+        totalLoadTime_ = 0L;
+
         return this;
       }
 
@@ -11403,6 +12123,18 @@ public org.opendedup.grpc.VolumeServiceOuterClass.DSEInfo buildPartial() {
         result.cloudSecretKey_ = cloudSecretKey_;
         result.bucketName_ = bucketName_;
         result.maxAge_ = maxAge_;
+        result.averageLoadPenalty_ = averageLoadPenalty_;
+        result.evictionCount_ = evictionCount_;
+        result.hitCount_ = hitCount_;
+        result.hitRate_ = hitRate_;
+        result.loadCount_ = loadCount_;
+        result.loadExceptionCount_ = loadExceptionCount_;
+        result.loadExceptionRate_ = loadExceptionRate_;
+        result.loadSuccessCount_ = loadSuccessCount_;
+        result.missCount_ = missCount_;
+        result.missRate_ = missRate_;
+        result.requestCount_ = requestCount_;
+        result.totalLoadTime_ = totalLoadTime_;
         onBuilt();
         return result;
       }
@@ -11518,6 +12250,42 @@ public Builder mergeFrom(org.opendedup.grpc.VolumeServiceOuterClass.DSEInfo othe
         if (other.getMaxAge() != 0L) {
           setMaxAge(other.getMaxAge());
         }
+        if (other.getAverageLoadPenalty() != 0D) {
+          setAverageLoadPenalty(other.getAverageLoadPenalty());
+        }
+        if (other.getEvictionCount() != 0L) {
+          setEvictionCount(other.getEvictionCount());
+        }
+        if (other.getHitCount() != 0L) {
+          setHitCount(other.getHitCount());
+        }
+        if (other.getHitRate() != 0D) {
+          setHitRate(other.getHitRate());
+        }
+        if (other.getLoadCount() != 0L) {
+          setLoadCount(other.getLoadCount());
+        }
+        if (other.getLoadExceptionCount() != 0L) {
+          setLoadExceptionCount(other.getLoadExceptionCount());
+        }
+        if (other.getLoadExceptionRate() != 0D) {
+          setLoadExceptionRate(other.getLoadExceptionRate());
+        }
+        if (other.getLoadSuccessCount() != 0L) {
+          setLoadSuccessCount(other.getLoadSuccessCount());
+        }
+        if (other.getMissCount() != 0L) {
+          setMissCount(other.getMissCount());
+        }
+        if (other.getMissRate() != 0D) {
+          setMissRate(other.getMissRate());
+        }
+        if (other.getRequestCount() != 0L) {
+          setRequestCount(other.getRequestCount());
+        }
+        if (other.getTotalLoadTime() != 0L) {
+          setTotalLoadTime(other.getTotalLoadTime());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -12393,91 +13161,463 @@ public java.lang.String getBucketName() {
         }
       }
       /**
-       * string bucketName = 19;
-       * @return The bytes for bucketName.
+       * string bucketName = 19;
+       * @return The bytes for bucketName.
+       */
+      public com.google.protobuf.ByteString
+          getBucketNameBytes() {
+        java.lang.Object ref = bucketName_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          bucketName_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * string bucketName = 19;
+       * @param value The bucketName to set.
+       * @return This builder for chaining.
+       */
+      public Builder setBucketName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        bucketName_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * string bucketName = 19;
+       * @return This builder for chaining.
+       */
+      public Builder clearBucketName() {
+        
+        bucketName_ = getDefaultInstance().getBucketName();
+        onChanged();
+        return this;
+      }
+      /**
+       * string bucketName = 19;
+       * @param value The bytes for bucketName to set.
+       * @return This builder for chaining.
+       */
+      public Builder setBucketNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        bucketName_ = value;
+        onChanged();
+        return this;
+      }
+
+      private long maxAge_ ;
+      /**
+       * int64 maxAge = 20;
+       * @return The maxAge.
+       */
+      @java.lang.Override
+      public long getMaxAge() {
+        return maxAge_;
+      }
+      /**
+       * int64 maxAge = 20;
+       * @param value The maxAge to set.
+       * @return This builder for chaining.
+       */
+      public Builder setMaxAge(long value) {
+        
+        maxAge_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 maxAge = 20;
+       * @return This builder for chaining.
+       */
+      public Builder clearMaxAge() {
+        
+        maxAge_ = 0L;
+        onChanged();
+        return this;
+      }
+
+      private double averageLoadPenalty_ ;
+      /**
+       * double averageLoadPenalty = 21;
+       * @return The averageLoadPenalty.
+       */
+      @java.lang.Override
+      public double getAverageLoadPenalty() {
+        return averageLoadPenalty_;
+      }
+      /**
+       * double averageLoadPenalty = 21;
+       * @param value The averageLoadPenalty to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAverageLoadPenalty(double value) {
+        
+        averageLoadPenalty_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * double averageLoadPenalty = 21;
+       * @return This builder for chaining.
+       */
+      public Builder clearAverageLoadPenalty() {
+        
+        averageLoadPenalty_ = 0D;
+        onChanged();
+        return this;
+      }
+
+      private long evictionCount_ ;
+      /**
+       * int64 evictionCount = 22;
+       * @return The evictionCount.
+       */
+      @java.lang.Override
+      public long getEvictionCount() {
+        return evictionCount_;
+      }
+      /**
+       * int64 evictionCount = 22;
+       * @param value The evictionCount to set.
+       * @return This builder for chaining.
+       */
+      public Builder setEvictionCount(long value) {
+        
+        evictionCount_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 evictionCount = 22;
+       * @return This builder for chaining.
+       */
+      public Builder clearEvictionCount() {
+        
+        evictionCount_ = 0L;
+        onChanged();
+        return this;
+      }
+
+      private long hitCount_ ;
+      /**
+       * int64 hitCount = 23;
+       * @return The hitCount.
+       */
+      @java.lang.Override
+      public long getHitCount() {
+        return hitCount_;
+      }
+      /**
+       * int64 hitCount = 23;
+       * @param value The hitCount to set.
+       * @return This builder for chaining.
+       */
+      public Builder setHitCount(long value) {
+        
+        hitCount_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 hitCount = 23;
+       * @return This builder for chaining.
+       */
+      public Builder clearHitCount() {
+        
+        hitCount_ = 0L;
+        onChanged();
+        return this;
+      }
+
+      private double hitRate_ ;
+      /**
+       * double hitRate = 24;
+       * @return The hitRate.
+       */
+      @java.lang.Override
+      public double getHitRate() {
+        return hitRate_;
+      }
+      /**
+       * double hitRate = 24;
+       * @param value The hitRate to set.
+       * @return This builder for chaining.
+       */
+      public Builder setHitRate(double value) {
+        
+        hitRate_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * double hitRate = 24;
+       * @return This builder for chaining.
+       */
+      public Builder clearHitRate() {
+        
+        hitRate_ = 0D;
+        onChanged();
+        return this;
+      }
+
+      private long loadCount_ ;
+      /**
+       * int64 loadCount = 25;
+       * @return The loadCount.
+       */
+      @java.lang.Override
+      public long getLoadCount() {
+        return loadCount_;
+      }
+      /**
+       * int64 loadCount = 25;
+       * @param value The loadCount to set.
+       * @return This builder for chaining.
+       */
+      public Builder setLoadCount(long value) {
+        
+        loadCount_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 loadCount = 25;
+       * @return This builder for chaining.
+       */
+      public Builder clearLoadCount() {
+        
+        loadCount_ = 0L;
+        onChanged();
+        return this;
+      }
+
+      private long loadExceptionCount_ ;
+      /**
+       * int64 loadExceptionCount = 26;
+       * @return The loadExceptionCount.
+       */
+      @java.lang.Override
+      public long getLoadExceptionCount() {
+        return loadExceptionCount_;
+      }
+      /**
+       * int64 loadExceptionCount = 26;
+       * @param value The loadExceptionCount to set.
+       * @return This builder for chaining.
+       */
+      public Builder setLoadExceptionCount(long value) {
+        
+        loadExceptionCount_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 loadExceptionCount = 26;
+       * @return This builder for chaining.
+       */
+      public Builder clearLoadExceptionCount() {
+        
+        loadExceptionCount_ = 0L;
+        onChanged();
+        return this;
+      }
+
+      private double loadExceptionRate_ ;
+      /**
+       * double loadExceptionRate = 27;
+       * @return The loadExceptionRate.
+       */
+      @java.lang.Override
+      public double getLoadExceptionRate() {
+        return loadExceptionRate_;
+      }
+      /**
+       * double loadExceptionRate = 27;
+       * @param value The loadExceptionRate to set.
+       * @return This builder for chaining.
+       */
+      public Builder setLoadExceptionRate(double value) {
+        
+        loadExceptionRate_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * double loadExceptionRate = 27;
+       * @return This builder for chaining.
+       */
+      public Builder clearLoadExceptionRate() {
+        
+        loadExceptionRate_ = 0D;
+        onChanged();
+        return this;
+      }
+
+      private long loadSuccessCount_ ;
+      /**
+       * int64 loadSuccessCount = 28;
+       * @return The loadSuccessCount.
+       */
+      @java.lang.Override
+      public long getLoadSuccessCount() {
+        return loadSuccessCount_;
+      }
+      /**
+       * int64 loadSuccessCount = 28;
+       * @param value The loadSuccessCount to set.
+       * @return This builder for chaining.
+       */
+      public Builder setLoadSuccessCount(long value) {
+        
+        loadSuccessCount_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 loadSuccessCount = 28;
+       * @return This builder for chaining.
+       */
+      public Builder clearLoadSuccessCount() {
+        
+        loadSuccessCount_ = 0L;
+        onChanged();
+        return this;
+      }
+
+      private long missCount_ ;
+      /**
+       * int64 missCount = 29;
+       * @return The missCount.
+       */
+      @java.lang.Override
+      public long getMissCount() {
+        return missCount_;
+      }
+      /**
+       * int64 missCount = 29;
+       * @param value The missCount to set.
+       * @return This builder for chaining.
+       */
+      public Builder setMissCount(long value) {
+        
+        missCount_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 missCount = 29;
+       * @return This builder for chaining.
+       */
+      public Builder clearMissCount() {
+        
+        missCount_ = 0L;
+        onChanged();
+        return this;
+      }
+
+      private double missRate_ ;
+      /**
+       * double missRate = 30;
+       * @return The missRate.
        */
-      public com.google.protobuf.ByteString
-          getBucketNameBytes() {
-        java.lang.Object ref = bucketName_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          bucketName_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
+      @java.lang.Override
+      public double getMissRate() {
+        return missRate_;
       }
       /**
-       * string bucketName = 19;
-       * @param value The bucketName to set.
+       * double missRate = 30;
+       * @param value The missRate to set.
        * @return This builder for chaining.
        */
-      public Builder setBucketName(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        bucketName_ = value;
+      public Builder setMissRate(double value) {
+        
+        missRate_ = value;
         onChanged();
         return this;
       }
       /**
-       * string bucketName = 19;
+       * double missRate = 30;
        * @return This builder for chaining.
        */
-      public Builder clearBucketName() {
+      public Builder clearMissRate() {
         
-        bucketName_ = getDefaultInstance().getBucketName();
+        missRate_ = 0D;
         onChanged();
         return this;
       }
+
+      private long requestCount_ ;
       /**
-       * string bucketName = 19;
-       * @param value The bytes for bucketName to set.
+       * int64 requestCount = 31;
+       * @return The requestCount.
+       */
+      @java.lang.Override
+      public long getRequestCount() {
+        return requestCount_;
+      }
+      /**
+       * int64 requestCount = 31;
+       * @param value The requestCount to set.
        * @return This builder for chaining.
        */
-      public Builder setBucketNameBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
+      public Builder setRequestCount(long value) {
         
-        bucketName_ = value;
+        requestCount_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 requestCount = 31;
+       * @return This builder for chaining.
+       */
+      public Builder clearRequestCount() {
+        
+        requestCount_ = 0L;
         onChanged();
         return this;
       }
 
-      private long maxAge_ ;
+      private long totalLoadTime_ ;
       /**
-       * int64 maxAge = 20;
-       * @return The maxAge.
+       * int64 totalLoadTime = 32;
+       * @return The totalLoadTime.
        */
       @java.lang.Override
-      public long getMaxAge() {
-        return maxAge_;
+      public long getTotalLoadTime() {
+        return totalLoadTime_;
       }
       /**
-       * int64 maxAge = 20;
-       * @param value The maxAge to set.
+       * int64 totalLoadTime = 32;
+       * @param value The totalLoadTime to set.
        * @return This builder for chaining.
        */
-      public Builder setMaxAge(long value) {
+      public Builder setTotalLoadTime(long value) {
         
-        maxAge_ = value;
+        totalLoadTime_ = value;
         onChanged();
         return this;
       }
       /**
-       * int64 maxAge = 20;
+       * int64 totalLoadTime = 32;
        * @return This builder for chaining.
        */
-      public Builder clearMaxAge() {
+      public Builder clearTotalLoadTime() {
         
-        maxAge_ = 0L;
+        totalLoadTime_ = 0L;
         onChanged();
         return this;
       }
@@ -12537,6 +13677,12 @@ public org.opendedup.grpc.VolumeServiceOuterClass.DSEInfo getDefaultInstanceForT
   public interface DSERequestOrBuilder extends
       // @@protoc_insertion_point(interface_extends:org.opendedup.grpc.DSERequest)
       com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * int64 pvolumeID = 1;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.DSERequest}
@@ -12583,6 +13729,11 @@ private DSERequest(
             case 0:
               done = true;
               break;
+            case 8: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -12615,6 +13766,17 @@ private DSERequest(
               org.opendedup.grpc.VolumeServiceOuterClass.DSERequest.class, org.opendedup.grpc.VolumeServiceOuterClass.DSERequest.Builder.class);
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 1;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 1;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -12629,6 +13791,9 @@ public final boolean isInitialized() {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(1, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -12638,6 +13803,10 @@ public int getSerializedSize() {
       if (size != -1) return size;
 
       size = 0;
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(1, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -12653,6 +13822,8 @@ public boolean equals(final java.lang.Object obj) {
       }
       org.opendedup.grpc.VolumeServiceOuterClass.DSERequest other = (org.opendedup.grpc.VolumeServiceOuterClass.DSERequest) obj;
 
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -12664,6 +13835,9 @@ public int hashCode() {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -12797,6 +13971,8 @@ private void maybeForceBuilderInitialization() {
       @java.lang.Override
       public Builder clear() {
         super.clear();
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -12823,6 +13999,7 @@ public org.opendedup.grpc.VolumeServiceOuterClass.DSERequest build() {
       @java.lang.Override
       public org.opendedup.grpc.VolumeServiceOuterClass.DSERequest buildPartial() {
         org.opendedup.grpc.VolumeServiceOuterClass.DSERequest result = new org.opendedup.grpc.VolumeServiceOuterClass.DSERequest(this);
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -12871,6 +14048,9 @@ public Builder mergeFrom(com.google.protobuf.Message other) {
 
       public Builder mergeFrom(org.opendedup.grpc.VolumeServiceOuterClass.DSERequest other) {
         if (other == org.opendedup.grpc.VolumeServiceOuterClass.DSERequest.getDefaultInstance()) return this;
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -12899,6 +14079,37 @@ public Builder mergeFrom(
         }
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 1;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 1;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 1;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -13857,6 +15068,12 @@ public interface AuthenticationRequestOrBuilder extends
      */
     com.google.protobuf.ByteString
         getPasswordBytes();
+
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.AuthenticationRequest}
@@ -13917,6 +15134,11 @@ private AuthenticationRequest(
               password_ = s;
               break;
             }
+            case 24: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -14025,6 +15247,17 @@ public java.lang.String getPassword() {
       }
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 3;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 3;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -14045,6 +15278,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (!getPasswordBytes().isEmpty()) {
         com.google.protobuf.GeneratedMessageV3.writeString(output, 2, password_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(3, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -14060,6 +15296,10 @@ public int getSerializedSize() {
       if (!getPasswordBytes().isEmpty()) {
         size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, password_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(3, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -14079,6 +15319,8 @@ public boolean equals(final java.lang.Object obj) {
           .equals(other.getUsername())) return false;
       if (!getPassword()
           .equals(other.getPassword())) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -14094,6 +15336,9 @@ public int hashCode() {
       hash = (53 * hash) + getUsername().hashCode();
       hash = (37 * hash) + PASSWORD_FIELD_NUMBER;
       hash = (53 * hash) + getPassword().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -14231,6 +15476,8 @@ public Builder clear() {
 
         password_ = "";
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -14259,6 +15506,7 @@ public org.opendedup.grpc.VolumeServiceOuterClass.AuthenticationRequest buildPar
         org.opendedup.grpc.VolumeServiceOuterClass.AuthenticationRequest result = new org.opendedup.grpc.VolumeServiceOuterClass.AuthenticationRequest(this);
         result.username_ = username_;
         result.password_ = password_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -14315,6 +15563,9 @@ public Builder mergeFrom(org.opendedup.grpc.VolumeServiceOuterClass.Authenticati
           password_ = other.password_;
           onChanged();
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -14495,6 +15746,37 @@ public Builder setPasswordBytes(
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 3;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 3;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -16835,6 +18117,12 @@ public interface CleanStoreRequestOrBuilder extends
      * @return The compact.
      */
     boolean getCompact();
+
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.CleanStoreRequest}
@@ -16886,6 +18174,11 @@ private CleanStoreRequest(
               compact_ = input.readBool();
               break;
             }
+            case 16: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -16929,6 +18222,17 @@ public boolean getCompact() {
       return compact_;
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 2;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -16946,6 +18250,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (compact_ != false) {
         output.writeBool(1, compact_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(2, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -16959,6 +18266,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeBoolSize(1, compact_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(2, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -16976,6 +18287,8 @@ public boolean equals(final java.lang.Object obj) {
 
       if (getCompact()
           != other.getCompact()) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -16990,6 +18303,9 @@ public int hashCode() {
       hash = (37 * hash) + COMPACT_FIELD_NUMBER;
       hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
           getCompact());
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -17125,6 +18441,8 @@ public Builder clear() {
         super.clear();
         compact_ = false;
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -17152,6 +18470,7 @@ public org.opendedup.grpc.VolumeServiceOuterClass.CleanStoreRequest build() {
       public org.opendedup.grpc.VolumeServiceOuterClass.CleanStoreRequest buildPartial() {
         org.opendedup.grpc.VolumeServiceOuterClass.CleanStoreRequest result = new org.opendedup.grpc.VolumeServiceOuterClass.CleanStoreRequest(this);
         result.compact_ = compact_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -17203,6 +18522,9 @@ public Builder mergeFrom(org.opendedup.grpc.VolumeServiceOuterClass.CleanStoreRe
         if (other.getCompact() != false) {
           setCompact(other.getCompact());
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -17262,6 +18584,37 @@ public Builder clearCompact() {
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 2;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -18149,6 +19502,12 @@ public interface SetCacheSizeRequestOrBuilder extends
      * @return The cacheSize.
      */
     long getCacheSize();
+
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.SetCacheSizeRequest}
@@ -18200,6 +19559,11 @@ private SetCacheSizeRequest(
               cacheSize_ = input.readInt64();
               break;
             }
+            case 16: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -18243,6 +19607,17 @@ public long getCacheSize() {
       return cacheSize_;
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 2;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -18260,6 +19635,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (cacheSize_ != 0L) {
         output.writeInt64(1, cacheSize_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(2, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -18273,6 +19651,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeInt64Size(1, cacheSize_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(2, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -18290,6 +19672,8 @@ public boolean equals(final java.lang.Object obj) {
 
       if (getCacheSize()
           != other.getCacheSize()) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -18304,6 +19688,9 @@ public int hashCode() {
       hash = (37 * hash) + CACHESIZE_FIELD_NUMBER;
       hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
           getCacheSize());
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -18439,6 +19826,8 @@ public Builder clear() {
         super.clear();
         cacheSize_ = 0L;
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -18466,6 +19855,7 @@ public org.opendedup.grpc.VolumeServiceOuterClass.SetCacheSizeRequest build() {
       public org.opendedup.grpc.VolumeServiceOuterClass.SetCacheSizeRequest buildPartial() {
         org.opendedup.grpc.VolumeServiceOuterClass.SetCacheSizeRequest result = new org.opendedup.grpc.VolumeServiceOuterClass.SetCacheSizeRequest(this);
         result.cacheSize_ = cacheSize_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -18517,6 +19907,9 @@ public Builder mergeFrom(org.opendedup.grpc.VolumeServiceOuterClass.SetCacheSize
         if (other.getCacheSize() != 0L) {
           setCacheSize(other.getCacheSize());
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -18576,6 +19969,37 @@ public Builder clearCacheSize() {
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 2;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -19459,10 +20883,16 @@ public interface DeleteCloudVolumeRequestOrBuilder extends
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * int64 volumeid = 1;
-     * @return The volumeid.
+     * int64 rmvolume = 1;
+     * @return The rmvolume.
      */
-    long getVolumeid();
+    long getRmvolume();
+
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.DeleteCloudVolumeRequest}
@@ -19511,7 +20941,12 @@ private DeleteCloudVolumeRequest(
               break;
             case 8: {
 
-              volumeid_ = input.readInt64();
+              rmvolume_ = input.readInt64();
+              break;
+            }
+            case 16: {
+
+              pvolumeID_ = input.readInt64();
               break;
             }
             default: {
@@ -19546,15 +20981,26 @@ private DeleteCloudVolumeRequest(
               org.opendedup.grpc.VolumeServiceOuterClass.DeleteCloudVolumeRequest.class, org.opendedup.grpc.VolumeServiceOuterClass.DeleteCloudVolumeRequest.Builder.class);
     }
 
-    public static final int VOLUMEID_FIELD_NUMBER = 1;
-    private long volumeid_;
+    public static final int RMVOLUME_FIELD_NUMBER = 1;
+    private long rmvolume_;
     /**
-     * int64 volumeid = 1;
-     * @return The volumeid.
+     * int64 rmvolume = 1;
+     * @return The rmvolume.
      */
     @java.lang.Override
-    public long getVolumeid() {
-      return volumeid_;
+    public long getRmvolume() {
+      return rmvolume_;
+    }
+
+    public static final int PVOLUMEID_FIELD_NUMBER = 2;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -19571,8 +21017,11 @@ public final boolean isInitialized() {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (volumeid_ != 0L) {
-        output.writeInt64(1, volumeid_);
+      if (rmvolume_ != 0L) {
+        output.writeInt64(1, rmvolume_);
+      }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(2, pvolumeID_);
       }
       unknownFields.writeTo(output);
     }
@@ -19583,9 +21032,13 @@ public int getSerializedSize() {
       if (size != -1) return size;
 
       size = 0;
-      if (volumeid_ != 0L) {
+      if (rmvolume_ != 0L) {
         size += com.google.protobuf.CodedOutputStream
-          .computeInt64Size(1, volumeid_);
+          .computeInt64Size(1, rmvolume_);
+      }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(2, pvolumeID_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -19602,8 +21055,10 @@ public boolean equals(final java.lang.Object obj) {
       }
       org.opendedup.grpc.VolumeServiceOuterClass.DeleteCloudVolumeRequest other = (org.opendedup.grpc.VolumeServiceOuterClass.DeleteCloudVolumeRequest) obj;
 
-      if (getVolumeid()
-          != other.getVolumeid()) return false;
+      if (getRmvolume()
+          != other.getRmvolume()) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -19615,9 +21070,12 @@ public int hashCode() {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + VOLUMEID_FIELD_NUMBER;
+      hash = (37 * hash) + RMVOLUME_FIELD_NUMBER;
       hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
-          getVolumeid());
+          getRmvolume());
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -19751,7 +21209,9 @@ private void maybeForceBuilderInitialization() {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        volumeid_ = 0L;
+        rmvolume_ = 0L;
+
+        pvolumeID_ = 0L;
 
         return this;
       }
@@ -19779,7 +21239,8 @@ public org.opendedup.grpc.VolumeServiceOuterClass.DeleteCloudVolumeRequest build
       @java.lang.Override
       public org.opendedup.grpc.VolumeServiceOuterClass.DeleteCloudVolumeRequest buildPartial() {
         org.opendedup.grpc.VolumeServiceOuterClass.DeleteCloudVolumeRequest result = new org.opendedup.grpc.VolumeServiceOuterClass.DeleteCloudVolumeRequest(this);
-        result.volumeid_ = volumeid_;
+        result.rmvolume_ = rmvolume_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -19827,9 +21288,12 @@ public Builder mergeFrom(com.google.protobuf.Message other) {
       }
 
       public Builder mergeFrom(org.opendedup.grpc.VolumeServiceOuterClass.DeleteCloudVolumeRequest other) {
-        if (other == org.opendedup.grpc.VolumeServiceOuterClass.DeleteCloudVolumeRequest.getDefaultInstance()) return this;
-        if (other.getVolumeid() != 0L) {
-          setVolumeid(other.getVolumeid());
+        if (other == org.opendedup.grpc.VolumeServiceOuterClass.DeleteCloudVolumeRequest.getDefaultInstance()) return this;
+        if (other.getRmvolume() != 0L) {
+          setRmvolume(other.getRmvolume());
+        }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -19860,33 +21324,64 @@ public Builder mergeFrom(
         return this;
       }
 
-      private long volumeid_ ;
+      private long rmvolume_ ;
       /**
-       * int64 volumeid = 1;
-       * @return The volumeid.
+       * int64 rmvolume = 1;
+       * @return The rmvolume.
        */
       @java.lang.Override
-      public long getVolumeid() {
-        return volumeid_;
+      public long getRmvolume() {
+        return rmvolume_;
       }
       /**
-       * int64 volumeid = 1;
-       * @param value The volumeid to set.
+       * int64 rmvolume = 1;
+       * @param value The rmvolume to set.
        * @return This builder for chaining.
        */
-      public Builder setVolumeid(long value) {
+      public Builder setRmvolume(long value) {
         
-        volumeid_ = value;
+        rmvolume_ = value;
         onChanged();
         return this;
       }
       /**
-       * int64 volumeid = 1;
+       * int64 rmvolume = 1;
        * @return This builder for chaining.
        */
-      public Builder clearVolumeid() {
+      public Builder clearRmvolume() {
         
-        volumeid_ = 0L;
+        rmvolume_ = 0L;
+        onChanged();
+        return this;
+      }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 2;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
         onChanged();
         return this;
       }
@@ -20777,6 +22272,12 @@ public interface SetVolumeCapacityRequestOrBuilder extends
      * @return The size.
      */
     long getSize();
+
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.SetVolumeCapacityRequest}
@@ -20828,6 +22329,11 @@ private SetVolumeCapacityRequest(
               size_ = input.readInt64();
               break;
             }
+            case 16: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -20871,6 +22377,17 @@ public long getSize() {
       return size_;
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 2;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -20888,6 +22405,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (size_ != 0L) {
         output.writeInt64(1, size_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(2, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -20901,6 +22421,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeInt64Size(1, size_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(2, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -20918,6 +22442,8 @@ public boolean equals(final java.lang.Object obj) {
 
       if (getSize()
           != other.getSize()) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -20932,6 +22458,9 @@ public int hashCode() {
       hash = (37 * hash) + SIZE_FIELD_NUMBER;
       hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
           getSize());
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -21067,6 +22596,8 @@ public Builder clear() {
         super.clear();
         size_ = 0L;
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -21094,6 +22625,7 @@ public org.opendedup.grpc.VolumeServiceOuterClass.SetVolumeCapacityRequest build
       public org.opendedup.grpc.VolumeServiceOuterClass.SetVolumeCapacityRequest buildPartial() {
         org.opendedup.grpc.VolumeServiceOuterClass.SetVolumeCapacityRequest result = new org.opendedup.grpc.VolumeServiceOuterClass.SetVolumeCapacityRequest(this);
         result.size_ = size_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -21145,6 +22677,9 @@ public Builder mergeFrom(org.opendedup.grpc.VolumeServiceOuterClass.SetVolumeCap
         if (other.getSize() != 0L) {
           setSize(other.getSize());
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -21204,6 +22739,37 @@ public Builder clearSize() {
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 2;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -21947,6 +23513,12 @@ public interface SetPasswordRequestOrBuilder extends
      */
     com.google.protobuf.ByteString
         getPasswordBytes();
+
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.SetPasswordRequest}
@@ -22000,6 +23572,11 @@ private SetPasswordRequest(
               password_ = s;
               break;
             }
+            case 16: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -22070,6 +23647,17 @@ public java.lang.String getPassword() {
       }
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 2;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -22087,6 +23675,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (!getPasswordBytes().isEmpty()) {
         com.google.protobuf.GeneratedMessageV3.writeString(output, 1, password_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(2, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -22099,6 +23690,10 @@ public int getSerializedSize() {
       if (!getPasswordBytes().isEmpty()) {
         size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, password_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(2, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -22116,6 +23711,8 @@ public boolean equals(final java.lang.Object obj) {
 
       if (!getPassword()
           .equals(other.getPassword())) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -22129,6 +23726,9 @@ public int hashCode() {
       hash = (19 * hash) + getDescriptor().hashCode();
       hash = (37 * hash) + PASSWORD_FIELD_NUMBER;
       hash = (53 * hash) + getPassword().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -22264,6 +23864,8 @@ public Builder clear() {
         super.clear();
         password_ = "";
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -22291,6 +23893,7 @@ public org.opendedup.grpc.VolumeServiceOuterClass.SetPasswordRequest build() {
       public org.opendedup.grpc.VolumeServiceOuterClass.SetPasswordRequest buildPartial() {
         org.opendedup.grpc.VolumeServiceOuterClass.SetPasswordRequest result = new org.opendedup.grpc.VolumeServiceOuterClass.SetPasswordRequest(this);
         result.password_ = password_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -22343,6 +23946,9 @@ public Builder mergeFrom(org.opendedup.grpc.VolumeServiceOuterClass.SetPasswordR
           password_ = other.password_;
           onChanged();
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -22447,6 +24053,37 @@ public Builder setPasswordBytes(
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 2;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -23184,6 +24821,12 @@ public interface SpeedRequestOrBuilder extends
      * @return The requestedSpeed.
      */
     int getRequestedSpeed();
+
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.SpeedRequest}
@@ -23235,6 +24878,11 @@ private SpeedRequest(
               requestedSpeed_ = input.readInt32();
               break;
             }
+            case 16: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -23278,6 +24926,17 @@ public int getRequestedSpeed() {
       return requestedSpeed_;
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 2;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -23295,6 +24954,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (requestedSpeed_ != 0) {
         output.writeInt32(1, requestedSpeed_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(2, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -23308,6 +24970,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeInt32Size(1, requestedSpeed_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(2, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -23325,6 +24991,8 @@ public boolean equals(final java.lang.Object obj) {
 
       if (getRequestedSpeed()
           != other.getRequestedSpeed()) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -23338,6 +25006,9 @@ public int hashCode() {
       hash = (19 * hash) + getDescriptor().hashCode();
       hash = (37 * hash) + REQUESTEDSPEED_FIELD_NUMBER;
       hash = (53 * hash) + getRequestedSpeed();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -23473,6 +25144,8 @@ public Builder clear() {
         super.clear();
         requestedSpeed_ = 0;
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -23500,6 +25173,7 @@ public org.opendedup.grpc.VolumeServiceOuterClass.SpeedRequest build() {
       public org.opendedup.grpc.VolumeServiceOuterClass.SpeedRequest buildPartial() {
         org.opendedup.grpc.VolumeServiceOuterClass.SpeedRequest result = new org.opendedup.grpc.VolumeServiceOuterClass.SpeedRequest(this);
         result.requestedSpeed_ = requestedSpeed_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -23551,6 +25225,9 @@ public Builder mergeFrom(org.opendedup.grpc.VolumeServiceOuterClass.SpeedRequest
         if (other.getRequestedSpeed() != 0) {
           setRequestedSpeed(other.getRequestedSpeed());
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -23610,6 +25287,37 @@ public Builder clearRequestedSpeed() {
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 2;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -24497,6 +26205,12 @@ public interface SyncFromVolRequestOrBuilder extends
      * @return The volumeid.
      */
     long getVolumeid();
+
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.SyncFromVolRequest}
@@ -24548,6 +26262,11 @@ private SyncFromVolRequest(
               volumeid_ = input.readInt64();
               break;
             }
+            case 16: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -24591,6 +26310,17 @@ public long getVolumeid() {
       return volumeid_;
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 2;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -24608,6 +26338,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (volumeid_ != 0L) {
         output.writeInt64(1, volumeid_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(2, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -24621,6 +26354,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeInt64Size(1, volumeid_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(2, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -24638,6 +26375,8 @@ public boolean equals(final java.lang.Object obj) {
 
       if (getVolumeid()
           != other.getVolumeid()) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -24652,6 +26391,9 @@ public int hashCode() {
       hash = (37 * hash) + VOLUMEID_FIELD_NUMBER;
       hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
           getVolumeid());
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -24787,6 +26529,8 @@ public Builder clear() {
         super.clear();
         volumeid_ = 0L;
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -24814,6 +26558,7 @@ public org.opendedup.grpc.VolumeServiceOuterClass.SyncFromVolRequest build() {
       public org.opendedup.grpc.VolumeServiceOuterClass.SyncFromVolRequest buildPartial() {
         org.opendedup.grpc.VolumeServiceOuterClass.SyncFromVolRequest result = new org.opendedup.grpc.VolumeServiceOuterClass.SyncFromVolRequest(this);
         result.volumeid_ = volumeid_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -24865,6 +26610,9 @@ public Builder mergeFrom(org.opendedup.grpc.VolumeServiceOuterClass.SyncFromVolR
         if (other.getVolumeid() != 0L) {
           setVolumeid(other.getVolumeid());
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -24924,6 +26672,37 @@ public Builder clearVolumeid() {
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 2;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -25805,6 +27584,12 @@ public org.opendedup.grpc.VolumeServiceOuterClass.SyncFromVolResponse getDefault
   public interface SyncVolRequestOrBuilder extends
       // @@protoc_insertion_point(interface_extends:org.opendedup.grpc.SyncVolRequest)
       com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * int64 pvolumeID = 1;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.SyncVolRequest}
@@ -25851,6 +27636,11 @@ private SyncVolRequest(
             case 0:
               done = true;
               break;
+            case 8: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -25883,6 +27673,17 @@ private SyncVolRequest(
               org.opendedup.grpc.VolumeServiceOuterClass.SyncVolRequest.class, org.opendedup.grpc.VolumeServiceOuterClass.SyncVolRequest.Builder.class);
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 1;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 1;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -25897,6 +27698,9 @@ public final boolean isInitialized() {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(1, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -25906,6 +27710,10 @@ public int getSerializedSize() {
       if (size != -1) return size;
 
       size = 0;
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(1, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -25921,6 +27729,8 @@ public boolean equals(final java.lang.Object obj) {
       }
       org.opendedup.grpc.VolumeServiceOuterClass.SyncVolRequest other = (org.opendedup.grpc.VolumeServiceOuterClass.SyncVolRequest) obj;
 
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -25932,6 +27742,9 @@ public int hashCode() {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -26065,6 +27878,8 @@ private void maybeForceBuilderInitialization() {
       @java.lang.Override
       public Builder clear() {
         super.clear();
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -26091,6 +27906,7 @@ public org.opendedup.grpc.VolumeServiceOuterClass.SyncVolRequest build() {
       @java.lang.Override
       public org.opendedup.grpc.VolumeServiceOuterClass.SyncVolRequest buildPartial() {
         org.opendedup.grpc.VolumeServiceOuterClass.SyncVolRequest result = new org.opendedup.grpc.VolumeServiceOuterClass.SyncVolRequest(this);
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -26139,6 +27955,9 @@ public Builder mergeFrom(com.google.protobuf.Message other) {
 
       public Builder mergeFrom(org.opendedup.grpc.VolumeServiceOuterClass.SyncVolRequest other) {
         if (other == org.opendedup.grpc.VolumeServiceOuterClass.SyncVolRequest.getDefaultInstance()) return this;
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -26167,6 +27986,37 @@ public Builder mergeFrom(
         }
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 1;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 1;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 1;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -27054,6 +28904,12 @@ public interface SetMaxAgeRequestOrBuilder extends
      * @return The maxAge.
      */
     long getMaxAge();
+
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    long getPvolumeID();
   }
   /**
    * Protobuf type {@code org.opendedup.grpc.SetMaxAgeRequest}
@@ -27105,6 +28961,11 @@ private SetMaxAgeRequest(
               maxAge_ = input.readInt64();
               break;
             }
+            case 16: {
+
+              pvolumeID_ = input.readInt64();
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -27148,6 +29009,17 @@ public long getMaxAge() {
       return maxAge_;
     }
 
+    public static final int PVOLUMEID_FIELD_NUMBER = 2;
+    private long pvolumeID_;
+    /**
+     * int64 pvolumeID = 2;
+     * @return The pvolumeID.
+     */
+    @java.lang.Override
+    public long getPvolumeID() {
+      return pvolumeID_;
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -27165,6 +29037,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output)
       if (maxAge_ != 0L) {
         output.writeInt64(1, maxAge_);
       }
+      if (pvolumeID_ != 0L) {
+        output.writeInt64(2, pvolumeID_);
+      }
       unknownFields.writeTo(output);
     }
 
@@ -27178,6 +29053,10 @@ public int getSerializedSize() {
         size += com.google.protobuf.CodedOutputStream
           .computeInt64Size(1, maxAge_);
       }
+      if (pvolumeID_ != 0L) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeInt64Size(2, pvolumeID_);
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -27195,6 +29074,8 @@ public boolean equals(final java.lang.Object obj) {
 
       if (getMaxAge()
           != other.getMaxAge()) return false;
+      if (getPvolumeID()
+          != other.getPvolumeID()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -27209,6 +29090,9 @@ public int hashCode() {
       hash = (37 * hash) + MAXAGE_FIELD_NUMBER;
       hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
           getMaxAge());
+      hash = (37 * hash) + PVOLUMEID_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+          getPvolumeID());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -27344,6 +29228,8 @@ public Builder clear() {
         super.clear();
         maxAge_ = 0L;
 
+        pvolumeID_ = 0L;
+
         return this;
       }
 
@@ -27371,6 +29257,7 @@ public org.opendedup.grpc.VolumeServiceOuterClass.SetMaxAgeRequest build() {
       public org.opendedup.grpc.VolumeServiceOuterClass.SetMaxAgeRequest buildPartial() {
         org.opendedup.grpc.VolumeServiceOuterClass.SetMaxAgeRequest result = new org.opendedup.grpc.VolumeServiceOuterClass.SetMaxAgeRequest(this);
         result.maxAge_ = maxAge_;
+        result.pvolumeID_ = pvolumeID_;
         onBuilt();
         return result;
       }
@@ -27422,6 +29309,9 @@ public Builder mergeFrom(org.opendedup.grpc.VolumeServiceOuterClass.SetMaxAgeReq
         if (other.getMaxAge() != 0L) {
           setMaxAge(other.getMaxAge());
         }
+        if (other.getPvolumeID() != 0L) {
+          setPvolumeID(other.getPvolumeID());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -27481,6 +29371,37 @@ public Builder clearMaxAge() {
         onChanged();
         return this;
       }
+
+      private long pvolumeID_ ;
+      /**
+       * int64 pvolumeID = 2;
+       * @return The pvolumeID.
+       */
+      @java.lang.Override
+      public long getPvolumeID() {
+        return pvolumeID_;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @param value The pvolumeID to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPvolumeID(long value) {
+        
+        pvolumeID_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * int64 pvolumeID = 2;
+       * @return This builder for chaining.
+       */
+      public Builder clearPvolumeID() {
+        
+        pvolumeID_ = 0L;
+        onChanged();
+        return this;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -28389,146 +30310,160 @@ public org.opendedup.grpc.VolumeServiceOuterClass.SetMaxAgeResponse getDefaultIn
   static {
     java.lang.String[] descriptorData = {
       "\n\023VolumeService.proto\022\022org.opendedup.grp" +
-      "c\032\016Shutdown.proto\032\016FileInfo.proto\"\023\n\021Vol" +
-      "umeInfoRequest\"\350\005\n\022VolumeInfoResponse\022\014\n" +
-      "\004path\030\001 \001(\t\022\014\n\004name\030\002 \001(\t\022\023\n\013currentSize" +
-      "\030\003 \001(\003\022\021\n\tcapactity\030\004 \001(\003\022\031\n\021maxPercenta" +
-      "geFull\030\005 \001(\001\022\026\n\016duplicateBytes\030\006 \001(\003\022\021\n\t" +
-      "readBytes\030\007 \001(\001\022\022\n\nwriteBytes\030\010 \001(\003\022\024\n\014s" +
-      "erialNumber\030\t \001(\003\022\017\n\007dseSize\030\n \001(\003\022\023\n\013ds" +
-      "eCompSize\030\013 \001(\003\022\017\n\007readOps\030\014 \001(\001\022\020\n\010writ" +
-      "eOps\030\r \001(\001\022\022\n\nreadErrors\030\016 \001(\003\022\023\n\013writeE" +
-      "rrors\030\017 \001(\003\022\r\n\005files\030\020 \001(\003\022\030\n\020closedGrac" +
-      "efully\030\021 \001(\010\022\032\n\022allowExternalLinks\030\022 \001(\010" +
-      "\022\022\n\nusePerfMon\030\023 \001(\010\022\021\n\tclusterId\030\024 \001(\t\022" +
-      "\027\n\017VolumeClustered\030\025 \001(\010\022\032\n\022readTimeoutS" +
-      "econds\030\026 \001(\005\022\033\n\023writeTimeoutSeconds\030\027 \001(" +
-      "\005\022\032\n\022compressedMetaData\030\030 \001(\010\022\021\n\tsyncFil" +
-      "es\030\031 \001(\010\022\023\n\013maxPageSize\030\032 \001(\003\022B\n\014message" +
-      "Queue\030\033 \003(\0132,.org.opendedup.grpc.Message" +
-      "QueueInfoResponse\022\023\n\013perfMonFile\030\034 \001(\t\022\017" +
-      "\n\007offline\030\035 \001(\010\022\r\n\005error\030\036 \001(\t\0221\n\terrorC" +
-      "ode\030\037 \001(\0162\036.org.opendedup.grpc.errorCode" +
-      "s\"\337\001\n\nSystemInfo\022\025\n\ractiveThreads\030\001 \001(\005\022" +
-      "\024\n\014blocksStored\030\002 \001(\005\022\027\n\017maxBlocksStored" +
-      "\030\003 \001(\005\022\022\n\ntotalSpace\030\004 \001(\003\022\021\n\tfreeSpace\030" +
-      "\005 \001(\003\022\024\n\014totalCpuLoad\030\006 \001(\001\022\020\n\010cpuCores\030" +
-      "\007 \001(\001\022\023\n\013sdfsCpuLoad\030\010 \001(\001\022\023\n\013totalMemor" +
-      "y\030\n \001(\001\022\022\n\nfreeMemory\030\013 \001(\001\"\023\n\021SystemInf" +
-      "oRequest\"\260\001\n\023ConnectedVolumeInfo\022\n\n\002id\030\001" +
-      " \001(\003\022\r\n\005local\030\002 \001(\010\022\020\n\010hostname\030\003 \001(\t\022\014\n" +
-      "\004port\030\004 \001(\005\022\014\n\004size\030\005 \001(\003\022\026\n\016compressedS" +
-      "ize\030\006 \001(\003\022\023\n\013sdfsVersion\030\007 \001(\t\022\022\n\nlastUp" +
-      "date\030\010 \001(\003\022\017\n\007version\030\t \001(\005\"\023\n\021GCSchedul" +
-      "eRequest\"h\n\022GCScheduleResponse\022\020\n\010schedu" +
-      "le\030\001 \001(\t\022\r\n\005error\030\002 \001(\t\0221\n\terrorCode\030\003 \001" +
-      "(\0162\036.org.opendedup.grpc.errorCodes\"\025\n\023Cl" +
-      "oudVolumesRequest\"\225\001\n\024CloudVolumesRespon" +
-      "se\022;\n\nvolumeInfo\030\001 \003(\0132\'.org.opendedup.g" +
-      "rpc.ConnectedVolumeInfo\022\r\n\005error\030\002 \001(\t\0221" +
-      "\n\terrorCode\030\003 \001(\0162\036.org.opendedup.grpc.e" +
-      "rrorCodes\"\204\001\n\022SystemInfoResponse\022,\n\004info" +
-      "\030\001 \001(\0132\036.org.opendedup.grpc.SystemInfo\022\r" +
+      "c\032\016Shutdown.proto\032\016FileInfo.proto\"&\n\021Vol" +
+      "umeInfoRequest\022\021\n\tpvolumeID\030\001 \001(\003\"\350\005\n\022Vo" +
+      "lumeInfoResponse\022\014\n\004path\030\001 \001(\t\022\014\n\004name\030\002" +
+      " \001(\t\022\023\n\013currentSize\030\003 \001(\003\022\021\n\tcapactity\030\004" +
+      " \001(\003\022\031\n\021maxPercentageFull\030\005 \001(\001\022\026\n\016dupli" +
+      "cateBytes\030\006 \001(\003\022\021\n\treadBytes\030\007 \001(\001\022\022\n\nwr" +
+      "iteBytes\030\010 \001(\003\022\024\n\014serialNumber\030\t \001(\003\022\017\n\007" +
+      "dseSize\030\n \001(\003\022\023\n\013dseCompSize\030\013 \001(\003\022\017\n\007re" +
+      "adOps\030\014 \001(\001\022\020\n\010writeOps\030\r \001(\001\022\022\n\nreadErr" +
+      "ors\030\016 \001(\003\022\023\n\013writeErrors\030\017 \001(\003\022\r\n\005files\030" +
+      "\020 \001(\003\022\030\n\020closedGracefully\030\021 \001(\010\022\032\n\022allow" +
+      "ExternalLinks\030\022 \001(\010\022\022\n\nusePerfMon\030\023 \001(\010\022" +
+      "\021\n\tclusterId\030\024 \001(\t\022\027\n\017VolumeClustered\030\025 " +
+      "\001(\010\022\032\n\022readTimeoutSeconds\030\026 \001(\005\022\033\n\023write" +
+      "TimeoutSeconds\030\027 \001(\005\022\032\n\022compressedMetaDa" +
+      "ta\030\030 \001(\010\022\021\n\tsyncFiles\030\031 \001(\010\022\023\n\013maxPageSi" +
+      "ze\030\032 \001(\003\022B\n\014messageQueue\030\033 \003(\0132,.org.ope" +
+      "ndedup.grpc.MessageQueueInfoResponse\022\023\n\013" +
+      "perfMonFile\030\034 \001(\t\022\017\n\007offline\030\035 \001(\010\022\r\n\005er" +
+      "ror\030\036 \001(\t\0221\n\terrorCode\030\037 \001(\0162\036.org.opend" +
+      "edup.grpc.errorCodes\"\337\001\n\nSystemInfo\022\025\n\ra" +
+      "ctiveThreads\030\001 \001(\005\022\024\n\014blocksStored\030\002 \001(\005" +
+      "\022\027\n\017maxBlocksStored\030\003 \001(\005\022\022\n\ntotalSpace\030" +
+      "\004 \001(\003\022\021\n\tfreeSpace\030\005 \001(\003\022\024\n\014totalCpuLoad" +
+      "\030\006 \001(\001\022\020\n\010cpuCores\030\007 \001(\001\022\023\n\013sdfsCpuLoad\030" +
+      "\010 \001(\001\022\023\n\013totalMemory\030\n \001(\001\022\022\n\nfreeMemory" +
+      "\030\013 \001(\001\"&\n\021SystemInfoRequest\022\021\n\tpvolumeID" +
+      "\030\001 \001(\003\"\260\001\n\023ConnectedVolumeInfo\022\n\n\002id\030\001 \001" +
+      "(\003\022\r\n\005local\030\002 \001(\010\022\020\n\010hostname\030\003 \001(\t\022\014\n\004p" +
+      "ort\030\004 \001(\005\022\014\n\004size\030\005 \001(\003\022\026\n\016compressedSiz" +
+      "e\030\006 \001(\003\022\023\n\013sdfsVersion\030\007 \001(\t\022\022\n\nlastUpda" +
+      "te\030\010 \001(\003\022\017\n\007version\030\t \001(\005\"&\n\021GCScheduleR" +
+      "equest\022\021\n\tpvolumeID\030\001 \001(\003\"h\n\022GCScheduleR" +
+      "esponse\022\020\n\010schedule\030\001 \001(\t\022\r\n\005error\030\002 \001(\t" +
+      "\0221\n\terrorCode\030\003 \001(\0162\036.org.opendedup.grpc" +
+      ".errorCodes\"(\n\023CloudVolumesRequest\022\021\n\tpv" +
+      "olumeID\030\001 \001(\003\"\225\001\n\024CloudVolumesResponse\022;" +
+      "\n\nvolumeInfo\030\001 \003(\0132\'.org.opendedup.grpc." +
+      "ConnectedVolumeInfo\022\r\n\005error\030\002 \001(\t\0221\n\ter" +
+      "rorCode\030\003 \001(\0162\036.org.opendedup.grpc.error" +
+      "Codes\"\204\001\n\022SystemInfoResponse\022,\n\004info\030\001 \001" +
+      "(\0132\036.org.opendedup.grpc.SystemInfo\022\r\n\005er" +
+      "ror\030\002 \001(\t\0221\n\terrorCode\030\003 \001(\0162\036.org.opend" +
+      "edup.grpc.errorCodes\"\261\005\n\007DSEInfo\022\017\n\007maxS" +
+      "ize\030\001 \001(\003\022\023\n\013currentSize\030\002 \001(\003\022\017\n\007entrie" +
+      "s\030\003 \001(\003\022\026\n\016compressedSize\030\004 \001(\003\022\022\n\nfreeB" +
+      "locks\030\005 \001(\003\022\020\n\010pageSize\030\006 \001(\003\022\023\n\013storage" +
+      "Type\030\007 \001(\t\022\022\n\nlistenPort\030\010 \001(\005\022\022\n\nlisten" +
+      "Host\030\t \001(\t\022\021\n\treadSpeed\030\n \001(\005\022\022\n\nwriteSp" +
+      "eed\030\013 \001(\005\022\021\n\tcacheSize\030\014 \001(\003\022\024\n\014maxCache" +
+      "Size\030\r \001(\003\022\027\n\017listenEncrypted\030\016 \001(\010\022\025\n\re" +
+      "ncryptionKey\030\017 \001(\t\022\024\n\014encryptionIV\030\020 \001(\t" +
+      "\022\026\n\016cloudAccessKey\030\021 \001(\t\022\026\n\016cloudSecretK" +
+      "ey\030\022 \001(\t\022\022\n\nbucketName\030\023 \001(\t\022\016\n\006maxAge\030\024" +
+      " \001(\003\022\032\n\022averageLoadPenalty\030\025 \001(\001\022\025\n\revic" +
+      "tionCount\030\026 \001(\003\022\020\n\010hitCount\030\027 \001(\003\022\017\n\007hit" +
+      "Rate\030\030 \001(\001\022\021\n\tloadCount\030\031 \001(\003\022\032\n\022loadExc" +
+      "eptionCount\030\032 \001(\003\022\031\n\021loadExceptionRate\030\033" +
+      " \001(\001\022\030\n\020loadSuccessCount\030\034 \001(\003\022\021\n\tmissCo" +
+      "unt\030\035 \001(\003\022\020\n\010missRate\030\036 \001(\001\022\024\n\014requestCo" +
+      "unt\030\037 \001(\003\022\025\n\rtotalLoadTime\030  \001(\003\"\037\n\nDSER" +
+      "equest\022\021\n\tpvolumeID\030\001 \001(\003\"z\n\013DSEResponse" +
+      "\022)\n\004info\030\001 \001(\0132\033.org.opendedup.grpc.DSEI" +
+      "nfo\022\r\n\005error\030\002 \001(\t\0221\n\terrorCode\030\003 \001(\0162\036." +
+      "org.opendedup.grpc.errorCodes\"N\n\025Authent" +
+      "icationRequest\022\020\n\010username\030\001 \001(\t\022\020\n\010pass" +
+      "word\030\002 \001(\t\022\021\n\tpvolumeID\030\003 \001(\003\"i\n\026Authent" +
+      "icationResponse\022\r\n\005token\030\001 \001(\t\022\r\n\005error\030" +
+      "\002 \001(\t\0221\n\terrorCode\030\003 \001(\0162\036.org.opendedup" +
+      ".grpc.errorCodes\"\353\001\n\030MessageQueueInfoRes" +
+      "ponse\022\020\n\010hostName\030\001 \001(\t\022C\n\006mqType\030\002 \001(\0162" +
+      "3.org.opendedup.grpc.MessageQueueInfoRes" +
+      "ponse.MQType\022\014\n\004port\030\003 \001(\005\022\r\n\005topic\030\004 \001(" +
+      "\t\022\020\n\010authInfo\030\005 \001(\t\022\024\n\014subScription\030\006 \001(" +
+      "\t\022\017\n\007project\030\007 \001(\t\"\"\n\006MQType\022\014\n\010RabbitMQ" +
+      "\020\000\022\n\n\006PubSub\020\001\"7\n\021CleanStoreRequest\022\017\n\007c" +
+      "ompact\030\001 \001(\010\022\021\n\tpvolumeID\030\002 \001(\003\"g\n\022Clean" +
+      "StoreResponse\022\017\n\007eventID\030\001 \001(\t\022\r\n\005error\030" +
+      "\002 \001(\t\0221\n\terrorCode\030\003 \001(\0162\036.org.opendedup" +
+      ".grpc.errorCodes\";\n\023SetCacheSizeRequest\022" +
+      "\021\n\tcacheSize\030\001 \001(\003\022\021\n\tpvolumeID\030\002 \001(\003\"i\n" +
+      "\024SetCacheSizeResponse\022\017\n\007eventID\030\001 \001(\t\022\r" +
+      "\n\005error\030\002 \001(\t\0221\n\terrorCode\030\003 \001(\0162\036.org.o" +
+      "pendedup.grpc.errorCodes\"?\n\030DeleteCloudV" +
+      "olumeRequest\022\020\n\010rmvolume\030\001 \001(\003\022\021\n\tpvolum" +
+      "eID\030\002 \001(\003\"n\n\031DeleteCloudVolumeResponse\022\017" +
+      "\n\007eventID\030\001 \001(\t\022\r\n\005error\030\002 \001(\t\0221\n\terrorC" +
+      "ode\030\003 \001(\0162\036.org.opendedup.grpc.errorCode" +
+      "s\";\n\030SetVolumeCapacityRequest\022\014\n\004size\030\001 " +
+      "\001(\003\022\021\n\tpvolumeID\030\002 \001(\003\"]\n\031SetVolumeCapac" +
+      "ityResponse\022\r\n\005error\030\001 \001(\t\0221\n\terrorCode\030" +
+      "\002 \001(\0162\036.org.opendedup.grpc.errorCodes\"9\n" +
+      "\022SetPasswordRequest\022\020\n\010password\030\001 \001(\t\022\021\n" +
+      "\tpvolumeID\030\002 \001(\003\"W\n\023SetPasswordResponse\022" +
+      "\r\n\005error\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.org." +
+      "opendedup.grpc.errorCodes\"9\n\014SpeedReques" +
+      "t\022\026\n\016requestedSpeed\030\001 \001(\005\022\021\n\tpvolumeID\030\002" +
+      " \001(\003\"b\n\rSpeedResponse\022\017\n\007eventID\030\001 \001(\t\022\r" +
       "\n\005error\030\002 \001(\t\0221\n\terrorCode\030\003 \001(\0162\036.org.o" +
-      "pendedup.grpc.errorCodes\"\245\003\n\007DSEInfo\022\017\n\007" +
-      "maxSize\030\001 \001(\003\022\023\n\013currentSize\030\002 \001(\003\022\017\n\007en" +
-      "tries\030\003 \001(\003\022\026\n\016compressedSize\030\004 \001(\003\022\022\n\nf" +
-      "reeBlocks\030\005 \001(\003\022\020\n\010pageSize\030\006 \001(\003\022\023\n\013sto" +
-      "rageType\030\007 \001(\t\022\022\n\nlistenPort\030\010 \001(\005\022\022\n\nli" +
-      "stenHost\030\t \001(\t\022\021\n\treadSpeed\030\n \001(\005\022\022\n\nwri" +
-      "teSpeed\030\013 \001(\005\022\021\n\tcacheSize\030\014 \001(\003\022\024\n\014maxC" +
-      "acheSize\030\r \001(\003\022\027\n\017listenEncrypted\030\016 \001(\010\022" +
-      "\025\n\rencryptionKey\030\017 \001(\t\022\024\n\014encryptionIV\030\020" +
-      " \001(\t\022\026\n\016cloudAccessKey\030\021 \001(\t\022\026\n\016cloudSec" +
-      "retKey\030\022 \001(\t\022\022\n\nbucketName\030\023 \001(\t\022\016\n\006maxA" +
-      "ge\030\024 \001(\003\"\014\n\nDSERequest\"z\n\013DSEResponse\022)\n" +
-      "\004info\030\001 \001(\0132\033.org.opendedup.grpc.DSEInfo" +
-      "\022\r\n\005error\030\002 \001(\t\0221\n\terrorCode\030\003 \001(\0162\036.org" +
-      ".opendedup.grpc.errorCodes\";\n\025Authentica" +
-      "tionRequest\022\020\n\010username\030\001 \001(\t\022\020\n\010passwor" +
-      "d\030\002 \001(\t\"i\n\026AuthenticationResponse\022\r\n\005tok" +
-      "en\030\001 \001(\t\022\r\n\005error\030\002 \001(\t\0221\n\terrorCode\030\003 \001" +
-      "(\0162\036.org.opendedup.grpc.errorCodes\"\353\001\n\030M" +
-      "essageQueueInfoResponse\022\020\n\010hostName\030\001 \001(" +
-      "\t\022C\n\006mqType\030\002 \001(\01623.org.opendedup.grpc.M" +
-      "essageQueueInfoResponse.MQType\022\014\n\004port\030\003" +
-      " \001(\005\022\r\n\005topic\030\004 \001(\t\022\020\n\010authInfo\030\005 \001(\t\022\024\n" +
-      "\014subScription\030\006 \001(\t\022\017\n\007project\030\007 \001(\t\"\"\n\006" +
-      "MQType\022\014\n\010RabbitMQ\020\000\022\n\n\006PubSub\020\001\"$\n\021Clea" +
-      "nStoreRequest\022\017\n\007compact\030\001 \001(\010\"g\n\022CleanS" +
-      "toreResponse\022\017\n\007eventID\030\001 \001(\t\022\r\n\005error\030\002" +
-      " \001(\t\0221\n\terrorCode\030\003 \001(\0162\036.org.opendedup." +
-      "grpc.errorCodes\"(\n\023SetCacheSizeRequest\022\021" +
-      "\n\tcacheSize\030\001 \001(\003\"i\n\024SetCacheSizeRespons" +
-      "e\022\017\n\007eventID\030\001 \001(\t\022\r\n\005error\030\002 \001(\t\0221\n\terr" +
-      "orCode\030\003 \001(\0162\036.org.opendedup.grpc.errorC" +
-      "odes\",\n\030DeleteCloudVolumeRequest\022\020\n\010volu" +
-      "meid\030\001 \001(\003\"n\n\031DeleteCloudVolumeResponse\022" +
-      "\017\n\007eventID\030\001 \001(\t\022\r\n\005error\030\002 \001(\t\0221\n\terror" +
-      "Code\030\003 \001(\0162\036.org.opendedup.grpc.errorCod" +
-      "es\"(\n\030SetVolumeCapacityRequest\022\014\n\004size\030\001" +
-      " \001(\003\"]\n\031SetVolumeCapacityResponse\022\r\n\005err" +
-      "or\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.org.opende" +
-      "dup.grpc.errorCodes\"&\n\022SetPasswordReques" +
-      "t\022\020\n\010password\030\001 \001(\t\"W\n\023SetPasswordRespon" +
-      "se\022\r\n\005error\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036.o" +
-      "rg.opendedup.grpc.errorCodes\"&\n\014SpeedReq" +
-      "uest\022\026\n\016requestedSpeed\030\001 \001(\005\"b\n\rSpeedRes" +
+      "pendedup.grpc.errorCodes\"9\n\022SyncFromVolR" +
+      "equest\022\020\n\010volumeid\030\001 \001(\003\022\021\n\tpvolumeID\030\002 " +
+      "\001(\003\"h\n\023SyncFromVolResponse\022\017\n\007eventID\030\001 " +
+      "\001(\t\022\r\n\005error\030\002 \001(\t\0221\n\terrorCode\030\003 \001(\0162\036." +
+      "org.opendedup.grpc.errorCodes\"#\n\016SyncVol" +
+      "Request\022\021\n\tpvolumeID\030\001 \001(\003\"d\n\017SyncVolRes" +
       "ponse\022\017\n\007eventID\030\001 \001(\t\022\r\n\005error\030\002 \001(\t\0221\n" +
       "\terrorCode\030\003 \001(\0162\036.org.opendedup.grpc.er" +
-      "rorCodes\"&\n\022SyncFromVolRequest\022\020\n\010volume" +
-      "id\030\001 \001(\003\"h\n\023SyncFromVolResponse\022\017\n\007event" +
-      "ID\030\001 \001(\t\022\r\n\005error\030\002 \001(\t\0221\n\terrorCode\030\003 \001" +
-      "(\0162\036.org.opendedup.grpc.errorCodes\"\020\n\016Sy" +
-      "ncVolRequest\"d\n\017SyncVolResponse\022\017\n\007event" +
-      "ID\030\001 \001(\t\022\r\n\005error\030\002 \001(\t\0221\n\terrorCode\030\003 \001" +
-      "(\0162\036.org.opendedup.grpc.errorCodes\"\"\n\020Se" +
-      "tMaxAgeRequest\022\016\n\006maxAge\030\001 \001(\003\"U\n\021SetMax" +
-      "AgeResponse\022\r\n\005error\030\001 \001(\t\0221\n\terrorCode\030" +
-      "\002 \001(\0162\036.org.opendedup.grpc.errorCodes2\367\014" +
-      "\n\rVolumeService\022i\n\020AuthenticateUser\022).or" +
-      "g.opendedup.grpc.AuthenticationRequest\032*" +
-      ".org.opendedup.grpc.AuthenticationRespon" +
-      "se\022^\n\rGetVolumeInfo\022%.org.opendedup.grpc" +
-      ".VolumeInfoRequest\032&.org.opendedup.grpc." +
-      "VolumeInfoResponse\022[\n\016ShutdownVolume\022#.o" +
-      "rg.opendedup.grpc.ShutdownRequest\032$.org." +
-      "opendedup.grpc.ShutdownResponse\022[\n\nClean" +
-      "Store\022%.org.opendedup.grpc.CleanStoreReq" +
-      "uest\032&.org.opendedup.grpc.CleanStoreResp" +
-      "onse\022p\n\021DeleteCloudVolume\022,.org.opendedu" +
-      "p.grpc.DeleteCloudVolumeRequest\032-.org.op" +
-      "endedup.grpc.DeleteCloudVolumeResponse\022J" +
-      "\n\007DSEInfo\022\036.org.opendedup.grpc.DSEReques" +
-      "t\032\037.org.opendedup.grpc.DSEResponse\022[\n\nSy" +
-      "stemInfo\022%.org.opendedup.grpc.SystemInfo" +
-      "Request\032&.org.opendedup.grpc.SystemInfoR" +
-      "esponse\022p\n\021SetVolumeCapacity\022,.org.opend" +
-      "edup.grpc.SetVolumeCapacityRequest\032-.org" +
-      ".opendedup.grpc.SetVolumeCapacityRespons" +
-      "e\022h\n\023GetConnectedVolumes\022\'.org.opendedup" +
-      ".grpc.CloudVolumesRequest\032(.org.opendedu" +
-      "p.grpc.CloudVolumesResponse\022^\n\rGetGCSche" +
-      "dule\022%.org.opendedup.grpc.GCScheduleRequ" +
-      "est\032&.org.opendedup.grpc.GCScheduleRespo" +
-      "nse\022a\n\014SetCacheSize\022\'.org.opendedup.grpc" +
-      ".SetCacheSizeRequest\032(.org.opendedup.grp" +
-      "c.SetCacheSizeResponse\022^\n\013SetPassword\022&." +
-      "org.opendedup.grpc.SetPasswordRequest\032\'." +
-      "org.opendedup.grpc.SetPasswordResponse\022S" +
-      "\n\014SetReadSpeed\022 .org.opendedup.grpc.Spee" +
-      "dRequest\032!.org.opendedup.grpc.SpeedRespo" +
-      "nse\022T\n\rSetWriteSpeed\022 .org.opendedup.grp" +
-      "c.SpeedRequest\032!.org.opendedup.grpc.Spee" +
-      "dResponse\022f\n\023SyncFromCloudVolume\022&.org.o" +
-      "pendedup.grpc.SyncFromVolRequest\032\'.org.o" +
-      "pendedup.grpc.SyncFromVolResponse\022Z\n\017Syn" +
-      "cCloudVolume\022\".org.opendedup.grpc.SyncVo" +
-      "lRequest\032#.org.opendedup.grpc.SyncVolRes" +
-      "ponse\022X\n\tSetMaxAge\022$.org.opendedup.grpc." +
-      "SetMaxAgeRequest\032%.org.opendedup.grpc.Se" +
-      "tMaxAgeResponseB0Z.github.com/opendedup/" +
-      "sdfs-client-go/sdfs/;sdfsb\006proto3"
+      "rorCodes\"5\n\020SetMaxAgeRequest\022\016\n\006maxAge\030\001" +
+      " \001(\003\022\021\n\tpvolumeID\030\002 \001(\003\"U\n\021SetMaxAgeResp" +
+      "onse\022\r\n\005error\030\001 \001(\t\0221\n\terrorCode\030\002 \001(\0162\036" +
+      ".org.opendedup.grpc.errorCodes2\367\014\n\rVolum" +
+      "eService\022i\n\020AuthenticateUser\022).org.opend" +
+      "edup.grpc.AuthenticationRequest\032*.org.op" +
+      "endedup.grpc.AuthenticationResponse\022^\n\rG" +
+      "etVolumeInfo\022%.org.opendedup.grpc.Volume" +
+      "InfoRequest\032&.org.opendedup.grpc.VolumeI" +
+      "nfoResponse\022[\n\016ShutdownVolume\022#.org.open" +
+      "dedup.grpc.ShutdownRequest\032$.org.opended" +
+      "up.grpc.ShutdownResponse\022[\n\nCleanStore\022%" +
+      ".org.opendedup.grpc.CleanStoreRequest\032&." +
+      "org.opendedup.grpc.CleanStoreResponse\022p\n" +
+      "\021DeleteCloudVolume\022,.org.opendedup.grpc." +
+      "DeleteCloudVolumeRequest\032-.org.opendedup" +
+      ".grpc.DeleteCloudVolumeResponse\022J\n\007DSEIn" +
+      "fo\022\036.org.opendedup.grpc.DSERequest\032\037.org" +
+      ".opendedup.grpc.DSEResponse\022[\n\nSystemInf" +
+      "o\022%.org.opendedup.grpc.SystemInfoRequest" +
+      "\032&.org.opendedup.grpc.SystemInfoResponse" +
+      "\022p\n\021SetVolumeCapacity\022,.org.opendedup.gr" +
+      "pc.SetVolumeCapacityRequest\032-.org.opende" +
+      "dup.grpc.SetVolumeCapacityResponse\022h\n\023Ge" +
+      "tConnectedVolumes\022\'.org.opendedup.grpc.C" +
+      "loudVolumesRequest\032(.org.opendedup.grpc." +
+      "CloudVolumesResponse\022^\n\rGetGCSchedule\022%." +
+      "org.opendedup.grpc.GCScheduleRequest\032&.o" +
+      "rg.opendedup.grpc.GCScheduleResponse\022a\n\014" +
+      "SetCacheSize\022\'.org.opendedup.grpc.SetCac" +
+      "heSizeRequest\032(.org.opendedup.grpc.SetCa" +
+      "cheSizeResponse\022^\n\013SetPassword\022&.org.ope" +
+      "ndedup.grpc.SetPasswordRequest\032\'.org.ope" +
+      "ndedup.grpc.SetPasswordResponse\022S\n\014SetRe" +
+      "adSpeed\022 .org.opendedup.grpc.SpeedReques" +
+      "t\032!.org.opendedup.grpc.SpeedResponse\022T\n\r" +
+      "SetWriteSpeed\022 .org.opendedup.grpc.Speed" +
+      "Request\032!.org.opendedup.grpc.SpeedRespon" +
+      "se\022f\n\023SyncFromCloudVolume\022&.org.opendedu" +
+      "p.grpc.SyncFromVolRequest\032\'.org.opendedu" +
+      "p.grpc.SyncFromVolResponse\022Z\n\017SyncCloudV" +
+      "olume\022\".org.opendedup.grpc.SyncVolReques" +
+      "t\032#.org.opendedup.grpc.SyncVolResponse\022X" +
+      "\n\tSetMaxAge\022$.org.opendedup.grpc.SetMaxA" +
+      "geRequest\032%.org.opendedup.grpc.SetMaxAge" +
+      "ResponseB0Z.github.com/opendedup/sdfs-cl" +
+      "ient-go/sdfs/;sdfsb\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
@@ -28541,7 +30476,7 @@ public org.opendedup.grpc.VolumeServiceOuterClass.SetMaxAgeResponse getDefaultIn
     internal_static_org_opendedup_grpc_VolumeInfoRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_VolumeInfoRequest_descriptor,
-        new java.lang.String[] { });
+        new java.lang.String[] { "PvolumeID", });
     internal_static_org_opendedup_grpc_VolumeInfoResponse_descriptor =
       getDescriptor().getMessageTypes().get(1);
     internal_static_org_opendedup_grpc_VolumeInfoResponse_fieldAccessorTable = new
@@ -28559,7 +30494,7 @@ public org.opendedup.grpc.VolumeServiceOuterClass.SetMaxAgeResponse getDefaultIn
     internal_static_org_opendedup_grpc_SystemInfoRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_SystemInfoRequest_descriptor,
-        new java.lang.String[] { });
+        new java.lang.String[] { "PvolumeID", });
     internal_static_org_opendedup_grpc_ConnectedVolumeInfo_descriptor =
       getDescriptor().getMessageTypes().get(4);
     internal_static_org_opendedup_grpc_ConnectedVolumeInfo_fieldAccessorTable = new
@@ -28571,7 +30506,7 @@ public org.opendedup.grpc.VolumeServiceOuterClass.SetMaxAgeResponse getDefaultIn
     internal_static_org_opendedup_grpc_GCScheduleRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_GCScheduleRequest_descriptor,
-        new java.lang.String[] { });
+        new java.lang.String[] { "PvolumeID", });
     internal_static_org_opendedup_grpc_GCScheduleResponse_descriptor =
       getDescriptor().getMessageTypes().get(6);
     internal_static_org_opendedup_grpc_GCScheduleResponse_fieldAccessorTable = new
@@ -28583,7 +30518,7 @@ public org.opendedup.grpc.VolumeServiceOuterClass.SetMaxAgeResponse getDefaultIn
     internal_static_org_opendedup_grpc_CloudVolumesRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_CloudVolumesRequest_descriptor,
-        new java.lang.String[] { });
+        new java.lang.String[] { "PvolumeID", });
     internal_static_org_opendedup_grpc_CloudVolumesResponse_descriptor =
       getDescriptor().getMessageTypes().get(8);
     internal_static_org_opendedup_grpc_CloudVolumesResponse_fieldAccessorTable = new
@@ -28601,13 +30536,13 @@ public org.opendedup.grpc.VolumeServiceOuterClass.SetMaxAgeResponse getDefaultIn
     internal_static_org_opendedup_grpc_DSEInfo_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_DSEInfo_descriptor,
-        new java.lang.String[] { "MaxSize", "CurrentSize", "Entries", "CompressedSize", "FreeBlocks", "PageSize", "StorageType", "ListenPort", "ListenHost", "ReadSpeed", "WriteSpeed", "CacheSize", "MaxCacheSize", "ListenEncrypted", "EncryptionKey", "EncryptionIV", "CloudAccessKey", "CloudSecretKey", "BucketName", "MaxAge", });
+        new java.lang.String[] { "MaxSize", "CurrentSize", "Entries", "CompressedSize", "FreeBlocks", "PageSize", "StorageType", "ListenPort", "ListenHost", "ReadSpeed", "WriteSpeed", "CacheSize", "MaxCacheSize", "ListenEncrypted", "EncryptionKey", "EncryptionIV", "CloudAccessKey", "CloudSecretKey", "BucketName", "MaxAge", "AverageLoadPenalty", "EvictionCount", "HitCount", "HitRate", "LoadCount", "LoadExceptionCount", "LoadExceptionRate", "LoadSuccessCount", "MissCount", "MissRate", "RequestCount", "TotalLoadTime", });
     internal_static_org_opendedup_grpc_DSERequest_descriptor =
       getDescriptor().getMessageTypes().get(11);
     internal_static_org_opendedup_grpc_DSERequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_DSERequest_descriptor,
-        new java.lang.String[] { });
+        new java.lang.String[] { "PvolumeID", });
     internal_static_org_opendedup_grpc_DSEResponse_descriptor =
       getDescriptor().getMessageTypes().get(12);
     internal_static_org_opendedup_grpc_DSEResponse_fieldAccessorTable = new
@@ -28619,7 +30554,7 @@ public org.opendedup.grpc.VolumeServiceOuterClass.SetMaxAgeResponse getDefaultIn
     internal_static_org_opendedup_grpc_AuthenticationRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_AuthenticationRequest_descriptor,
-        new java.lang.String[] { "Username", "Password", });
+        new java.lang.String[] { "Username", "Password", "PvolumeID", });
     internal_static_org_opendedup_grpc_AuthenticationResponse_descriptor =
       getDescriptor().getMessageTypes().get(14);
     internal_static_org_opendedup_grpc_AuthenticationResponse_fieldAccessorTable = new
@@ -28637,7 +30572,7 @@ public org.opendedup.grpc.VolumeServiceOuterClass.SetMaxAgeResponse getDefaultIn
     internal_static_org_opendedup_grpc_CleanStoreRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_CleanStoreRequest_descriptor,
-        new java.lang.String[] { "Compact", });
+        new java.lang.String[] { "Compact", "PvolumeID", });
     internal_static_org_opendedup_grpc_CleanStoreResponse_descriptor =
       getDescriptor().getMessageTypes().get(17);
     internal_static_org_opendedup_grpc_CleanStoreResponse_fieldAccessorTable = new
@@ -28649,7 +30584,7 @@ public org.opendedup.grpc.VolumeServiceOuterClass.SetMaxAgeResponse getDefaultIn
     internal_static_org_opendedup_grpc_SetCacheSizeRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_SetCacheSizeRequest_descriptor,
-        new java.lang.String[] { "CacheSize", });
+        new java.lang.String[] { "CacheSize", "PvolumeID", });
     internal_static_org_opendedup_grpc_SetCacheSizeResponse_descriptor =
       getDescriptor().getMessageTypes().get(19);
     internal_static_org_opendedup_grpc_SetCacheSizeResponse_fieldAccessorTable = new
@@ -28661,7 +30596,7 @@ public org.opendedup.grpc.VolumeServiceOuterClass.SetMaxAgeResponse getDefaultIn
     internal_static_org_opendedup_grpc_DeleteCloudVolumeRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_DeleteCloudVolumeRequest_descriptor,
-        new java.lang.String[] { "Volumeid", });
+        new java.lang.String[] { "Rmvolume", "PvolumeID", });
     internal_static_org_opendedup_grpc_DeleteCloudVolumeResponse_descriptor =
       getDescriptor().getMessageTypes().get(21);
     internal_static_org_opendedup_grpc_DeleteCloudVolumeResponse_fieldAccessorTable = new
@@ -28673,7 +30608,7 @@ public org.opendedup.grpc.VolumeServiceOuterClass.SetMaxAgeResponse getDefaultIn
     internal_static_org_opendedup_grpc_SetVolumeCapacityRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_SetVolumeCapacityRequest_descriptor,
-        new java.lang.String[] { "Size", });
+        new java.lang.String[] { "Size", "PvolumeID", });
     internal_static_org_opendedup_grpc_SetVolumeCapacityResponse_descriptor =
       getDescriptor().getMessageTypes().get(23);
     internal_static_org_opendedup_grpc_SetVolumeCapacityResponse_fieldAccessorTable = new
@@ -28685,7 +30620,7 @@ public org.opendedup.grpc.VolumeServiceOuterClass.SetMaxAgeResponse getDefaultIn
     internal_static_org_opendedup_grpc_SetPasswordRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_SetPasswordRequest_descriptor,
-        new java.lang.String[] { "Password", });
+        new java.lang.String[] { "Password", "PvolumeID", });
     internal_static_org_opendedup_grpc_SetPasswordResponse_descriptor =
       getDescriptor().getMessageTypes().get(25);
     internal_static_org_opendedup_grpc_SetPasswordResponse_fieldAccessorTable = new
@@ -28697,7 +30632,7 @@ public org.opendedup.grpc.VolumeServiceOuterClass.SetMaxAgeResponse getDefaultIn
     internal_static_org_opendedup_grpc_SpeedRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_SpeedRequest_descriptor,
-        new java.lang.String[] { "RequestedSpeed", });
+        new java.lang.String[] { "RequestedSpeed", "PvolumeID", });
     internal_static_org_opendedup_grpc_SpeedResponse_descriptor =
       getDescriptor().getMessageTypes().get(27);
     internal_static_org_opendedup_grpc_SpeedResponse_fieldAccessorTable = new
@@ -28709,7 +30644,7 @@ public org.opendedup.grpc.VolumeServiceOuterClass.SetMaxAgeResponse getDefaultIn
     internal_static_org_opendedup_grpc_SyncFromVolRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_SyncFromVolRequest_descriptor,
-        new java.lang.String[] { "Volumeid", });
+        new java.lang.String[] { "Volumeid", "PvolumeID", });
     internal_static_org_opendedup_grpc_SyncFromVolResponse_descriptor =
       getDescriptor().getMessageTypes().get(29);
     internal_static_org_opendedup_grpc_SyncFromVolResponse_fieldAccessorTable = new
@@ -28721,7 +30656,7 @@ public org.opendedup.grpc.VolumeServiceOuterClass.SetMaxAgeResponse getDefaultIn
     internal_static_org_opendedup_grpc_SyncVolRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_SyncVolRequest_descriptor,
-        new java.lang.String[] { });
+        new java.lang.String[] { "PvolumeID", });
     internal_static_org_opendedup_grpc_SyncVolResponse_descriptor =
       getDescriptor().getMessageTypes().get(31);
     internal_static_org_opendedup_grpc_SyncVolResponse_fieldAccessorTable = new
@@ -28733,7 +30668,7 @@ public org.opendedup.grpc.VolumeServiceOuterClass.SetMaxAgeResponse getDefaultIn
     internal_static_org_opendedup_grpc_SetMaxAgeRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_org_opendedup_grpc_SetMaxAgeRequest_descriptor,
-        new java.lang.String[] { "MaxAge", });
+        new java.lang.String[] { "MaxAge", "PvolumeID", });
     internal_static_org_opendedup_grpc_SetMaxAgeResponse_descriptor =
       getDescriptor().getMessageTypes().get(33);
     internal_static_org_opendedup_grpc_SetMaxAgeResponse_fieldAccessorTable = new
diff --git a/src/org/opendedup/hashing/Finger.java b/src/org/opendedup/hashing/Finger.java
index be463fd8d..c114a6535 100644
--- a/src/org/opendedup/hashing/Finger.java
+++ b/src/org/opendedup/hashing/Finger.java
@@ -49,7 +49,7 @@ public Finger(String uuid) {
 	public void run() {
 		try {
 			if (Arrays.equals(this.hash, k))
-				this.hl = new InsertRecord(false, 1);
+				this.hl = new InsertRecord(false, 1,0);
 			this.hl = HCServiceProxy.writeChunk(this.hash, this.chunk, claims, this.uuid);
 
 			l.commandResponse(this);
@@ -81,7 +81,7 @@ public void run() {
 		public void persist() throws IOException, HashtableFullException {
 			for (Finger f : fingers) {
 				if (Arrays.equals(f.hash, WritableCacheBuffer.bk))
-					f.hl = new InsertRecord(false, 1);
+					f.hl = new InsertRecord(false, 1,0);
 				f.hl = HCServiceProxy.writeChunk(f.hash, f.chunk, f.claims, f.uuid);
 
 			}
diff --git a/src/org/opendedup/logging/JSONLayout.java b/src/org/opendedup/logging/JSONLayout.java
deleted file mode 100644
index 9112e4e1c..000000000
--- a/src/org/opendedup/logging/JSONLayout.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com	
- *
- * This file is part of OpenDedupe SDFS.
- *
- * OpenDedupe SDFS is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * OpenDedupe SDFS 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Foobar.  If not, see .
- *******************************************************************************/
-package org.opendedup.logging;
-
-import java.io.IOException;
-import java.io.StringWriter;
-import java.util.Arrays;
-
-import org.apache.commons.lang3.StringUtils;
-import org.apache.log4j.Layout;
-import org.apache.log4j.spi.LoggingEvent;
-
-import com.fasterxml.jackson.core.JsonFactory;
-import com.fasterxml.jackson.core.JsonGenerator;
-
-public class JSONLayout extends Layout {
-
-	private final JsonFactory jsonFactory;
-	private String[] mdcKeys = new String[0];
-
-	public JSONLayout() {
-		jsonFactory = new JsonFactory();
-	}
-
-	@Override
-	public String format(LoggingEvent event) {
-		try {
-			StringWriter stringWriter = new StringWriter();
-			JsonGenerator g = createJsonGenerator(stringWriter);
-			g.writeStartObject();
-			writeBasicFields(event, g);
-			writeMDCValues(event, g);
-			writeThrowableEvents(event, g);
-			writeNDCValues(event, g);
-			g.writeEndObject();
-			g.close();
-			stringWriter.append("\n");
-			return stringWriter.toString();
-		} catch (IOException e) {
-			throw new JSONLayoutException(e);
-		}
-	}
-
-	private JsonGenerator createJsonGenerator(StringWriter stringWriter)
-			throws IOException {
-		JsonGenerator g = jsonFactory.createGenerator(stringWriter);
-		return g;
-	}
-
-	private void writeBasicFields(LoggingEvent event, JsonGenerator g)
-			throws IOException {
-		g.writeStringField("logger", event.getLoggerName());
-		g.writeStringField("level", event.getLevel().toString());
-		g.writeNumberField("timestamp", event.timeStamp);
-		g.writeStringField("threadName", event.getThreadName());
-		g.writeStringField("message", event.getMessage().toString());
-	}
-
-	private void writeNDCValues(LoggingEvent event, JsonGenerator g)
-			throws IOException {
-		if (event.getNDC() != null) {
-			g.writeStringField("NDC", event.getNDC());
-		}
-	}
-
-	private void writeThrowableEvents(LoggingEvent event, JsonGenerator g)
-			throws IOException {
-		String throwableString;
-		String[] throwableStrRep = event.getThrowableStrRep();
-		throwableString = "";
-		if (throwableStrRep != null) {
-			for (String s : throwableStrRep) {
-				throwableString += s + "\n";
-			}
-		}
-		if (throwableString.length() > 0) {
-			g.writeStringField("throwable", throwableString);
-		}
-	}
-
-	private void writeMDCValues(LoggingEvent event, JsonGenerator g)
-			throws IOException {
-		if (mdcKeys.length > 0) {
-			event.getMDCCopy();
-
-			g.writeObjectFieldStart("MDC");
-			for (String s : mdcKeys) {
-				Object mdc = event.getMDC(s);
-				if (mdc != null) {
-					g.writeStringField(s, mdc.toString());
-				}
-			}
-			g.writeEndObject();
-		}
-	}
-
-	public String[] getMdcKeys() {
-		return Arrays.copyOf(mdcKeys, mdcKeys.length);
-	}
-
-	public void setMdcKeysToUse(String mdcKeystoUse) {
-		if (StringUtils.isNotBlank(mdcKeystoUse)) {
-			this.mdcKeys = mdcKeystoUse.split(",");
-		}
-	}
-
-	@Override
-	public boolean ignoresThrowable() {
-		return false;
-	}
-
-	@Override
-	public void activateOptions() {
-	}
-}
diff --git a/src/org/opendedup/logging/JSONLayoutException.java b/src/org/opendedup/logging/JSONLayoutException.java
deleted file mode 100644
index db5814624..000000000
--- a/src/org/opendedup/logging/JSONLayoutException.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com	
- *
- * This file is part of OpenDedupe SDFS.
- *
- * OpenDedupe SDFS is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * OpenDedupe SDFS 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Foobar.  If not, see .
- *******************************************************************************/
-package org.opendedup.logging;
-
-public class JSONLayoutException extends RuntimeException {
-
-	/**
-	 * 
-	 */
-	private static final long serialVersionUID = 1L;
-
-	public JSONLayoutException(String message, Throwable t) {
-		super(message, t);
-	}
-
-	public JSONLayoutException(Throwable t) {
-		super(t);
-	}
-}
diff --git a/src/org/opendedup/logging/JSONVolPerfLayout.java b/src/org/opendedup/logging/JSONVolPerfLayout.java
deleted file mode 100644
index 35b92f3ec..000000000
--- a/src/org/opendedup/logging/JSONVolPerfLayout.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com	
- *
- * This file is part of OpenDedupe SDFS.
- *
- * OpenDedupe SDFS is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * OpenDedupe SDFS 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Foobar.  If not, see .
- *******************************************************************************/
-package org.opendedup.logging;
-
-import java.io.IOException;
-import java.io.StringWriter;
-
-import org.apache.log4j.Layout;
-import org.apache.log4j.spi.LoggingEvent;
-
-import com.fasterxml.jackson.core.JsonFactory;
-import com.fasterxml.jackson.core.JsonGenerator;
-
-public class JSONVolPerfLayout extends Layout {
-
-	private final JsonFactory jsonFactory;
-	private String[] mdcKeys = { "bytesRead", "bytesWritten",
-			"virtualBytesWritten", "RIOPS", "WIOPS", "duplicateBytes" };
-
-	public JSONVolPerfLayout() {
-		jsonFactory = new JsonFactory();
-	}
-
-	@Override
-	public String format(LoggingEvent event) {
-		try {
-			StringWriter stringWriter = new StringWriter();
-			JsonGenerator g = createJsonGenerator(stringWriter);
-			g.writeStartObject();
-			writeBasicFields(event, g);
-			writeMDCValues(event, g);
-			writeThrowableEvents(event, g);
-			writeNDCValues(event, g);
-			g.writeEndObject();
-			g.close();
-			stringWriter.append("\n");
-			return stringWriter.toString();
-		} catch (IOException e) {
-			throw new JSONLayoutException(e);
-		}
-	}
-
-	private JsonGenerator createJsonGenerator(StringWriter stringWriter)
-			throws IOException {
-		JsonGenerator g = jsonFactory.createGenerator(stringWriter);
-		return g;
-	}
-
-	private void writeBasicFields(LoggingEvent event, JsonGenerator g)
-			throws IOException {
-		g.writeNumberField("timestamp", event.timeStamp);
-		g.writeStringField("volume", event.getMessage().toString());
-	}
-
-	private void writeNDCValues(LoggingEvent event, JsonGenerator g)
-			throws IOException {
-		if (event.getNDC() != null) {
-			g.writeStringField("NDC", event.getNDC());
-		}
-	}
-
-	private void writeThrowableEvents(LoggingEvent event, JsonGenerator g)
-			throws IOException {
-		String throwableString;
-		String[] throwableStrRep = event.getThrowableStrRep();
-		throwableString = "";
-		if (throwableStrRep != null) {
-			for (String s : throwableStrRep) {
-				throwableString += s + "\n";
-			}
-		}
-		if (throwableString.length() > 0) {
-			g.writeStringField("throwable", throwableString);
-		}
-	}
-
-	private void writeMDCValues(LoggingEvent event, JsonGenerator g)
-			throws IOException {
-		if (mdcKeys.length > 0) {
-			event.getMDCCopy();
-
-			// g.writeObjectFieldStart("MDC");
-			for (String s : mdcKeys) {
-				Object mdc = event.getMDC(s);
-				if (mdc != null) {
-					g.writeStringField(s, mdc.toString());
-				}
-			}
-			// g.writeEndObject();
-		}
-	}
-
-	@Override
-	public boolean ignoresThrowable() {
-		return false;
-	}
-
-	@Override
-	public void activateOptions() {
-	}
-}
diff --git a/src/org/opendedup/logging/SDFSEventLogger.java b/src/org/opendedup/logging/SDFSEventLogger.java
deleted file mode 100644
index cc37607d9..000000000
--- a/src/org/opendedup/logging/SDFSEventLogger.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com	
- *
- * This file is part of OpenDedupe SDFS.
- *
- * OpenDedupe SDFS is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * OpenDedupe SDFS 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Foobar.  If not, see .
- *******************************************************************************/
-package org.opendedup.logging;
-
-import java.io.IOException;
-import java.util.Date;
-
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
-import org.apache.log4j.PatternLayout;
-import org.apache.log4j.RollingFileAppender;
-import org.opendedup.sdfs.Main;
-import org.opendedup.sdfs.notification.SDFSEvent;
-import org.slf4j.MDC;
-
-public class SDFSEventLogger {
-
-	private static Logger log = null;
-	static {
-		String evtLogPath = Main.logPath.substring(0,
-				Main.logPath.lastIndexOf("."))
-				+ "-events.log";
-		RollingFileAppender app = null;
-
-		try {
-
-			app = new RollingFileAppender(
-					new PatternLayout(
-							"%X{level},%X{type},%X{target},%X{shortMsg},%X{longMsg},%X{startTime},%X{endTime},%X{uid},%X{extendedInfo},%X{maxCt},%X{curCt}\n"),
-					evtLogPath, true);
-			app.setMaxBackupIndex(2);
-			app.setMaxFileSize("10MB");
-			app.activateOptions();
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-		log = Logger.getLogger("eventlog");
-		log.addAppender(app);
-		log.setLevel(Level.INFO);
-	}
-
-	public static void init() {
-		String evtLogPath = Main.logPath.substring(0,
-				Main.logPath.lastIndexOf("."))
-				+ "-events.log";
-		System.out.println(evtLogPath);
-		log = Logger.getLogger("eventlog");
-		RollingFileAppender app = null;
-		try {
-
-			app = new RollingFileAppender(
-					new PatternLayout(
-							"%X{level},%X{type},%X{target},%X{shortMsg},%X{longMsg},%X{startTime},%X{endTime},%X{uid},%X{extendedInfo},%X{maxCt},%X{curCt}"),
-					evtLogPath, true);
-			app.setMaxBackupIndex(2);
-			app.setMaxFileSize("10MB");
-			app.activateOptions();
-		} catch (IOException e) {
-			log.debug("unable to change appender", e);
-		}
-		log.addAppender(app);
-		log.setLevel(Level.INFO);
-	}
-
-	public static void setLevel(int level) {
-		if (level == 0)
-			log.setLevel(Level.DEBUG);
-		else
-			log.setLevel(Level.INFO);
-	}
-
-	public static synchronized void log(SDFSEvent evt) {
-		MDC.put("level", evt.level.toString());
-		MDC.put("uid", evt.uid);
-		MDC.put("type", evt.type.toString());
-		MDC.put("target", evt.target);
-		MDC.put("shortMsg", evt.shortMsg);
-		MDC.put("longMsg", evt.longMsg);
-		MDC.put("startTime", new Date(evt.startTime).toString());
-		MDC.put("endTime", new Date(evt.endTime).toString());
-		MDC.put("extendedInfo", evt.extendedInfo);
-		MDC.put("maxCt", Long.toString(evt.getMaxCount()));
-		MDC.put("curCt", Long.toString(evt.getCount()));
-		MDC.clear();
-	}
-
-	public static void main(String[] args) {
-		Main.logPath = "/tmp/volume-log-xml.log";
-		SDFSEvent evt = SDFSEvent.testEvent("Archiving out");
-		evt.setMaxCount(10);
-		evt.setCurrentCount(1);
-		evt.endEvent("woweessss");
-	}
-
-}
diff --git a/src/org/opendedup/logging/SDFSLogger.java b/src/org/opendedup/logging/SDFSLogger.java
index 68be43f69..a023d33e7 100644
--- a/src/org/opendedup/logging/SDFSLogger.java
+++ b/src/org/opendedup/logging/SDFSLogger.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com	
+ * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com
  *
  * This file is part of OpenDedupe SDFS.
  *
@@ -18,83 +18,105 @@
  *******************************************************************************/
 package org.opendedup.logging;
 
-import java.io.IOException;
+import java.util.Map;
 
-import org.apache.log4j.ConsoleAppender;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
-import org.apache.log4j.PatternLayout;
-import org.apache.log4j.RollingFileAppender;
+import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.Appender;
 import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.appender.ConsoleAppender;
+import org.apache.logging.log4j.core.appender.RollingFileAppender;
+import org.apache.logging.log4j.core.appender.rolling.DefaultRolloverStrategy;
+import org.apache.logging.log4j.core.appender.rolling.RolloverStrategy;
+import org.apache.logging.log4j.core.appender.rolling.SizeBasedTriggeringPolicy;
+import org.apache.logging.log4j.core.appender.rolling.TriggeringPolicy;
 import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.config.LoggerConfig;
+import org.apache.logging.log4j.core.layout.PatternLayout;
 import org.opendedup.sdfs.Main;
 
-import io.grpc.netty.shaded.io.netty.util.internal.logging.InternalLoggerFactory;
-import io.grpc.netty.shaded.io.netty.util.internal.logging.Log4JLoggerFactory;
-
 public class SDFSLogger {
-
-	private static Logger log = Logger.getLogger("sdfs");
-	private static Logger awslog = Logger.getLogger("com.amazonaws");
-	private static Logger quartzLog = Logger.getLogger("org.quartz");
-	private static Logger fslog = Logger.getLogger("fs");
-	private static Logger basicLog = Logger.getLogger("bsdfs");
-	private static boolean debug = false;
-	private static boolean fsdebug = false;
-	private static LoggerConfig grpcLoggerConfig;
-	static RollingFileAppender app = null;
+	private static Logger log = LogManager.getLogger("sdfs");
 	private static String msgPattern = "%d [%p] [%c] [%C] [%L] [%t] %x - %m%n";
+	private static boolean cl = false;
 	static {
-		InternalLoggerFactory.setDefaultFactory(Log4JLoggerFactory.INSTANCE);
-        LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
-        Configuration config = ctx.getConfiguration();
-		
-        grpcLoggerConfig = config.getLoggerConfig("io.netty");
-        grpcLoggerConfig.setLevel(org.apache.logging.log4j.Level.ERROR);
-        ctx.updateLoggers();
-
-		ConsoleAppender bapp = new ConsoleAppender(new PatternLayout("%m%n"));
-		basicLog.addAppender(bapp);
-
-		basicLog.setLevel(Level.WARN);
-		try {
-			//Todo: log-index-size
-			app = new RollingFileAppender(new PatternLayout(
-					msgPattern), Main.logPath, true);
-			app.setMaxBackupIndex(Main.logFiles);
-			app.setMaxFileSize(Main.logSize);
-		} catch (IOException e) {
-			log.debug("unable to change appender", e);
+		// createSdfsLogger();
+	}
+
+	protected static void removeAllAppenders(org.apache.logging.log4j.core.Logger logger) {
+		Map appenders = logger.getAppenders();
+		if (appenders != null) {
+			for (Appender appender : appenders.values()) {
+				logger.removeAppender(appender);
+			}
 		}
-		awslog.setLevel(Level.WARN);
-
-		quartzLog.setLevel(Level.INFO);
-		awslog.removeAllAppenders();
-		quartzLog.removeAllAppenders();
-		log.setLevel(Level.INFO);
-		fsdebug = true;
-		fslog.setLevel(Level.INFO);
-		Logger rootLogger = Logger.getRootLogger();
-		rootLogger.setLevel(Level.INFO);
-		rootLogger.addAppender(app);
 	}
 
 	public static void useConsoleLogger() {
-		ConsoleAppender bapp = new ConsoleAppender(new PatternLayout(msgPattern));
-		log.removeAllAppenders();
-		log.addAppender(bapp);
+		LoggerContext context = LoggerContext.getContext(false);
+		org.apache.logging.log4j.core.Logger clog = (org.apache.logging.log4j.core.Logger) log;
+		removeAllAppenders(clog);
+		PatternLayout layout = PatternLayout.newBuilder().withPattern(msgPattern).build();
+		Appender appender = ConsoleAppender.newBuilder().setLayout(layout).setName("consoleappender").build();
+		appender.start();
+		removeAllAppenders(clog);
+		clog.addAppender(appender);
+		context.updateLoggers();
+		cl = true;
 
 	}
 
+	public static void setLevel(int level) {
+		LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
+		Configuration config = ctx.getConfiguration();
+		LoggerConfig loggerConfig = config.getLoggerConfig("sdfs");
+		if (level == 0) {
+			loggerConfig.setLevel(Level.DEBUG);
+		} else {
+			loggerConfig.setLevel(Level.INFO);
+		}
+		ctx.updateLoggers();
+	}
+
+	public static void setLogSize(String size) {
+		Main.logSize = size;
+		createSdfsLogger();
+	}
+
+	public static void createSdfsLogger() {
+		if (!cl) {
+			LoggerContext context = (LoggerContext) LogManager.getContext();
+			Configuration config = context.getConfiguration();
+
+			PatternLayout layout = PatternLayout.newBuilder().withPattern(msgPattern)
+					.withConfiguration(config).withAlwaysWriteExceptions(true)
+					.withNoConsoleNoAnsi(false).build();
+			TriggeringPolicy tp = SizeBasedTriggeringPolicy.createPolicy(Main.logSize);
+			RolloverStrategy st = DefaultRolloverStrategy.newBuilder()
+					.withMax(Integer.toString(Main.logFiles))
+					.withMin("1")
+					.withConfig(config)
+					.withCompressionLevelStr("0")
+					.build();
+			Appender appender = RollingFileAppender.newBuilder().setLayout(layout).setName("rollingfileappender")
+					.withFileName(Main.logPath).withFilePattern(Main.logPath + ".%i").withAppend(true)
+					.withStrategy(st).withPolicy(tp).build();
+			appender.start();
+			org.apache.logging.log4j.core.Logger clog = (org.apache.logging.log4j.core.Logger) log;
+			removeAllAppenders(clog);
+			clog.addAppender(appender);
+			context.updateLoggers();
+		}
+	}
+
 	public static Logger getLog() {
 		return log;
 
 	}
 
 	public static Logger getFSLog() {
-		return fslog;
+		return log;
 	}
 
 	public static void infoConsoleMsg(String msg) {
@@ -103,60 +125,21 @@ public static void infoConsoleMsg(String msg) {
 	}
 
 	public static Logger getBasicLog() {
-		return basicLog;
+		return log;
 	}
 
-	public static boolean isDebug() {
-		return debug;
-	}
+	public static void main(String[] args) {
 
-	public static boolean isFSDebug() {
-		return fsdebug;
-	}
-	
-	public static void setLogSize(String size) {
-		app.setMaxFileSize(size);
-	}
-
-	public static void setLevel(int level) {
-		if (level == 0) {
-			log.setLevel(Level.DEBUG);
-			debug = true;
-		} else {
-			log.setLevel(Level.INFO);
-			debug = false;
+		Main.logPath = "test.log";
+		Main.logFiles = 10;
+		Main.logSize = "10K";
+		Main.logFiles = 10;
+		createSdfsLogger();
+		for (int i = 0; i < 1000000; i++) {
+			SDFSLogger.getLog().error("wow " + i);
 		}
-	}
+		System.out.println("1111");
 
-	public static void setFSLevel(int level) {
-		if (level == 0) {
-			fslog.setLevel(Level.DEBUG);
-			fsdebug = true;
-		} else {
-			fslog.setLevel(Level.INFO);
-			fsdebug = false;
-		}
 	}
 
-	public static void setToFileAppender(String file) {
-		try {
-			log.removeAllAppenders();
-		} catch (Exception e) {
-
-		}
-		RollingFileAppender app = null;
-		try {
-			app = new RollingFileAppender(new PatternLayout(
-					"%d [%c] [%t] %x - %m%n"), file, true);
-			app.setMaxBackupIndex(Main.logFiles);
-			app.setMaxFileSize(Main.logSize);
-		} catch (IOException e) {
-			System.out.println("Unable to initialize logger");
-			e.printStackTrace();
-		}
-		log.addAppender(app);
-		fslog.addAppender(app);
-		log.setLevel(Level.INFO);
-		fslog.setLevel(Level.DEBUG);
-	}
 }
diff --git a/src/org/opendedup/mtools/RestoreArchive.java b/src/org/opendedup/mtools/RestoreArchive.java
index 4e30f7ef2..461e95e95 100644
--- a/src/org/opendedup/mtools/RestoreArchive.java
+++ b/src/org/opendedup/mtools/RestoreArchive.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com	
+ * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com
  *
  * This file is part of OpenDedupe SDFS.
  *
@@ -30,6 +30,7 @@
 import org.opendedup.collections.LongKeyValue;
 import org.opendedup.collections.SparseDataChunk;
 import org.opendedup.logging.SDFSLogger;
+import org.opendedup.sdfs.Main;
 import org.opendedup.sdfs.io.HashLocPair;
 import org.opendedup.sdfs.io.MetaDataDedupFile;
 import org.opendedup.sdfs.notification.SDFSEvent;
@@ -46,7 +47,7 @@ public class RestoreArchive implements Runnable {
 	private HashMap restoreRequests = new HashMap();
 
 	public RestoreArchive(MetaDataDedupFile f,long id) throws IOException {
-		
+
 		this.f = f;
 		fEvt = SDFSEvent.archiveRestoreEvent(f);
 		fEvt.setMaxCount(FileCounts.getSize(new File(f.getPath()), false));
@@ -90,7 +91,7 @@ public static void recoverArchives(MetaDataDedupFile f) throws IOException {
 
 	private void initiateArchive() throws IOException {
 		LongByteArrayMap ddb = LongByteArrayMap.getMap(f.getDfGuid());
-		
+
 		if (ddb.getVersion() < 2)
 			throw new IOException("only files version 2 or later can be imported");
 		try {
@@ -102,11 +103,11 @@ private void initiateArchive() throws IOException {
 				SparseDataChunk ck = kv.getValue();
 				TreeMap al = ck.getFingers();
 				for (HashLocPair p : al.values()) {
-		
+
 					Long bw = Long.valueOf(Longs.fromByteArray(p.hashloc));
 					if (!this.restoreRequests.containsKey(Long.toString(bw))) {
 						SDFSLogger.getLog().debug("check = " + bw + " for restore.");
-						
+
 						String req = HCServiceProxy.restoreBlock(p.hash,bw);
 						if (req != null) {
 							SDFSLogger.getLog().info("will restore " + req + " for " + f.getPath());
@@ -114,9 +115,9 @@ private void initiateArchive() throws IOException {
 							this.totalArchives.incrementAndGet();
 						}
 						this.restoreRequests.put(Long.toString(bw), req);
-					} 
+					}
 				}
-				
+
 			}
 			SDFSLogger.getLog().info("Restore Initiated for " + this.restoreRequests.size() + " for " + f.getPath());
 
@@ -139,8 +140,9 @@ public void run() {
 			long start = System.currentTimeMillis();
 			this.init();
 			while (this.restoreRequests.size() > 0) {
+				HCServiceProxy.set_move_blob(true);
 				ArrayList al = new ArrayList();
-				
+
 				for (Entry key : this.restoreRequests.entrySet()) {
 					try {
 						if (key.getValue() == null)
@@ -169,6 +171,7 @@ public void run() {
 				if (this.restoreRequests.size() > 0)
 					Thread.sleep(2 * 60 * 1000);
 			}
+			Main.rehydrateBlobs = false;
 			SDFSLogger.getLog().info("took [" + (System.currentTimeMillis() - start) / (1000 * 60)
 					+ "] Minutes to import [" + totalArchives.get() + "]");
 			fEvt.endEvent("Archive Restore Succeeded for " + f.getPath());
diff --git a/src/org/opendedup/mtools/SyncFS.java b/src/org/opendedup/mtools/SyncFS.java
index d771e7b78..76857f9db 100644
--- a/src/org/opendedup/mtools/SyncFS.java
+++ b/src/org/opendedup/mtools/SyncFS.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com	
+ * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com
  *
  * This file is part of OpenDedupe SDFS.
  *
@@ -21,6 +21,7 @@
 import java.io.File;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.concurrent.ArrayBlockingQueue;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.RejectedExecutionHandler;
@@ -38,6 +39,7 @@
 import org.opendedup.sdfs.io.events.SFileSync;
 import org.opendedup.sdfs.notification.FDiskEvent;
 import org.opendedup.sdfs.notification.SDFSEvent;
+import org.opendedup.sdfs.servers.HCServiceProxy;
 import org.opendedup.util.FileCounts;
 
 import com.google.common.eventbus.EventBus;
@@ -58,14 +60,14 @@ worksQueue, new ProcessPriorityThreadFactory(Thread.MIN_PRIORITY),
 	public SyncFS() throws IOException {
 		fEvt = SDFSEvent
 				.fdiskInfoEvent("Starting Cloud Storage Conistancy Check for "
-						+ Main.volume.getName() );
+						+ Main.volume.getName());
 		this.init();
 	}
 
 	public SyncFS(String now) throws IOException {
 		fEvt = SDFSEvent
 				.fdiskInfoEvent("Starting Cloud Storage Conistancy Check for "
-						+ Main.volume.getName() );
+						+ Main.volume.getName());
 	}
 
 	public static void registerListener(Object obj) {
@@ -73,6 +75,20 @@ public static void registerListener(Object obj) {
 	}
 
 	public void init() throws IOException {
+		if (Main.runConsistancyCheckPeriodically || Main.runConsistancyCheck) {
+			try {
+				SDFSLogger.getLog().info(
+						"Initializing HCServiceProxy");
+				Main.sdfsSyncEnabled = true;
+				Main.syncDL = true;
+				ArrayList volumes = new ArrayList();
+				HCServiceProxy.init(volumes);
+			} catch (Exception e) {
+				SDFSLogger.getLog().fatal(
+						"Caught exception while Initializing HCServiceProxy", e);
+				e.printStackTrace();
+			}
+		}
 		File f = new File(Main.volume.getPath());
 		long entries = FileCounts.getCount(f, false);
 		try {
@@ -111,8 +127,12 @@ public void init() throws IOException {
 					.info("Cloud Storage Conistancy Check failed", e);
 			fEvt.endEvent(
 					"Cloud Storage Conistancy Check Failed because ["
-							+ e.toString() + "]", SDFSEvent.ERROR);
+							+ e.toString() + "]",
+					SDFSEvent.ERROR);
 
+		} finally {
+			Main.sdfsSyncEnabled = false;
+			//Main.syncDL = false;
 		}
 	}
 
@@ -170,7 +190,7 @@ public void run() {
 				fd.checkDedupFile(MetaDataDedupFile.getFile(f.getPath()));
 			} catch (IOException e) {
 				SDFSLogger.getLog()
-				.error("Cloud Storage Conistancy Check failed", e);
+						.error("Cloud Storage Conistancy Check failed", e);
 			}
 		}
 	}
diff --git a/src/org/opendedup/sdfs/Config.java b/src/org/opendedup/sdfs/Config.java
index 1340cdafa..489223a4e 100644
--- a/src/org/opendedup/sdfs/Config.java
+++ b/src/org/opendedup/sdfs/Config.java
@@ -2,7 +2,6 @@
 
 import java.io.File;
 
-
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.transform.Result;
@@ -17,13 +16,13 @@
 import org.opendedup.sdfs.io.Volume;
 import org.opendedup.sdfs.servers.HCServiceProxy;
 import org.opendedup.util.EncryptUtils;
+import org.opendedup.util.OSValidator;
 import org.opendedup.util.StorageUnit;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
 import com.google.common.io.BaseEncoding;
 
-
 public class Config {
 	public static boolean encrypted = false;
 
@@ -50,9 +49,7 @@ public synchronized static void parseGCConfigFile(String fileName) throws Except
 		Main.version = version;
 		SDFSLogger.getLog().info("Parsing gc " + doc.getDocumentElement().getNodeName() + " version " + version);
 		Element gc = (Element) doc.getElementsByTagName("gc").item(0);
-		if (gc.hasAttribute("log-level")) {
-			SDFSLogger.setLevel(Integer.parseInt(gc.getAttribute("log-level")));
-		}
+
 		Main.fDkiskSchedule = gc.getAttribute("claim-hash-schedule");
 
 	}
@@ -81,13 +78,16 @@ public synchronized static void parseSDFSConfigFile(String fileName, String pass
 		Main.sdfsPassword = cli.getAttribute("password");
 		Main.sdfsPasswordSalt = cli.getAttribute("salt");
 		Main.sdfsCliPort = Integer.parseInt(cli.getAttribute("port"));
+		if (cli.hasAttribute("immutabilityPeriod")) {
+			Main.immutabilityPeriod = Integer.parseInt(cli.getAttribute("immutabilityPeriod"));
+		}
 		if (cli.hasAttribute("use-ssl")) {
 			Main.sdfsCliSSL = Boolean.parseBoolean(cli.getAttribute("use-ssl"));
 		}
 		if (cli.hasAttribute("permissions-file")) {
 			Main.permissionsFile = cli.getAttribute("permissions-file");
-			File f  = new File(Main.permissionsFile);
-			if(!f.exists()){
+			File f = new File(Main.permissionsFile);
+			if (!f.exists()) {
 				f.getParentFile().mkdirs();
 
 			}
@@ -96,14 +96,15 @@ public synchronized static void parseSDFSConfigFile(String fileName, String pass
 		Main.sdfsCliRequireAuth = Boolean.parseBoolean(cli.getAttribute("enable-auth"));
 		Main.sdfsCliRequireMutualTLSAuth = Boolean.parseBoolean(cli.getAttribute("enable-mutual-tls-auth"));
 		Main.sdfsCliListenAddr = cli.getAttribute("listen-address");
-		if (cli.hasAttribute("auth-utility-jar-file-path")) {
-			Main.jarFilePath = cli.getAttribute("auth-utility-jar-file-path");
-		}
-		if (cli.hasAttribute("auth-class-info")) {
-			Main.classInfo = cli.getAttribute("auth-class-info");
-		}
+		Main.authJarFilePath = cli.getAttribute("auth-utility-jar-file-path");
+		Main.authClassInfo = cli.getAttribute("auth-class-info");
+		Main.prodConfigFilePath = cli.getAttribute("prod-config-file-path");
+		Main.prodConfigVariable = cli.getAttribute("prod-config-variable");
 		SDFSLogger.getLog().debug("listen-address=" + Main.sdfsCliListenAddr);
-
+		SDFSLogger.getLog().debug("auth-utility-jar-file-path=" + Main.authJarFilePath);
+		SDFSLogger.getLog().debug("auth-class-info=" + Main.authClassInfo);
+		SDFSLogger.getLog().debug("prod-config-file-path=" + Main.prodConfigFilePath);
+		SDFSLogger.getLog().debug("prod-config-variable=" + Main.prodConfigVariable);
 		Main.version = version;
 		SDFSLogger.getLog().info("Parsing volume " + doc.getDocumentElement().getNodeName() + " version " + version);
 		Element locations = (Element) doc.getElementsByTagName("locations").item(0);
@@ -115,6 +116,9 @@ public synchronized static void parseSDFSConfigFile(String fileName, String pass
 		if (cache.hasAttribute("encrypt-config")) {
 
 		}
+
+		// Close files when close cmd is executed. This should be set to false
+		// if running over nfs
 		if (cache.hasAttribute("log-level")) {
 			SDFSLogger.setLevel(Integer.parseInt(cache.getAttribute("log-level")));
 		}
@@ -125,8 +129,6 @@ public synchronized static void parseSDFSConfigFile(String fileName, String pass
 		if (cache.hasAttribute("log-index-size")) {
 			Main.logFiles = Integer.parseInt(cache.getAttribute("log-index-size"));
 		}
-		// Close files when close cmd is executed. This should be set to false
-		// if running over nfs
 		if (cache.hasAttribute("read-ahead")) {
 			Main.readAhead = Boolean.parseBoolean(cache.getAttribute("read-ahead"));
 		}
@@ -138,7 +140,7 @@ public synchronized static void parseSDFSConfigFile(String fileName, String pass
 		Main.safeSync = Boolean.parseBoolean(cache.getAttribute("safe-sync"));
 		Main.writeThreads = Integer.parseInt(cache.getAttribute("write-threads"));
 		if (cache.hasAttribute("max-open-sst-files")) {
-			Main.MAX_OPEN_SST_FILES = Integer.parseInt(cache.getAttribute("max-open-sst-files")) ;
+			Main.MAX_OPEN_SST_FILES = Integer.parseInt(cache.getAttribute("max-open-sst-files"));
 		}
 		if (cache.hasAttribute("min-variable-segment-size")) {
 
@@ -188,21 +190,21 @@ public synchronized static void parseSDFSConfigFile(String fileName, String pass
 		if (localChunkStore.hasAttribute("fpp")) {
 			Main.fpp = Double.parseDouble(localChunkStore.getAttribute("fpp"));
 		}
-		
+
 		if (localChunkStore.hasAttribute("average-chunk-size")) {
 			HashFunctionPool.avg_page_size = Integer.parseInt(localChunkStore.getAttribute("average-chunk-size"));
 		}
 		if (localChunkStore.hasAttribute("disable-auto-gc")) {
 			Main.disableAutoGC = Boolean.parseBoolean(localChunkStore.getAttribute("disable-auto-gc"));
 		}
-		if(localChunkStore.hasAttribute("compact-on-mount")) {
+		if (localChunkStore.hasAttribute("compact-on-mount")) {
 			Main.runCompact = Boolean.parseBoolean(localChunkStore.getAttribute("compact-on-mount"));
 		}
-		if(localChunkStore.hasAttribute("hashtable-rm-threshold")) {
+		if (localChunkStore.hasAttribute("hashtable-rm-threshold")) {
 			Main.HT_RM_THRESH = Long.parseLong(localChunkStore.getAttribute("hashtable-rm-threshold"));
 			SDFSLogger.getLog().info("HT_RM_THRESH = " + Main.HT_RM_THRESH);
 		}
-		
+
 		if (localChunkStore.hasAttribute("max-chunk-age")) {
 			Main.maxAge = Long.parseLong(localChunkStore.getAttribute("max-chunk-age"));
 		}
@@ -212,10 +214,10 @@ public synchronized static void parseSDFSConfigFile(String fileName, String pass
 		if (localChunkStore.hasAttribute("enable-lookup-filter")) {
 			Main.enableLookupFilter = Boolean.parseBoolean(localChunkStore.getAttribute("enable-lookup-filter"));
 		}
-		if(localChunkStore.hasAttribute("enable-batch-gc")) {
+		if (localChunkStore.hasAttribute("enable-batch-gc")) {
 			Main.DDB_TRASH_ENABLED = Boolean.parseBoolean(localChunkStore.getAttribute("enable-batch-gc"));
 		}
-		
+
 		if (localChunkStore.hasAttribute("gc-class"))
 			Main.gcClass = localChunkStore.getAttribute("gc-class");
 		Element volume = (Element) doc.getElementsByTagName("volume").item(0);
@@ -288,6 +290,10 @@ public synchronized static void parseSDFSConfigFile(String fileName, String pass
 				Main.cloudSecretKey = aws.getAttribute("aws-secret-key");
 			}
 			Main.cloudBucket = aws.getAttribute("aws-bucket-name");
+			Main.s3ApiCompatible = Boolean.parseBoolean(aws.getAttribute("s3-compatible-target"));
+			if (aws.hasAttribute("encrypt-bucket")) {
+				Main.encryptBucket = Boolean.parseBoolean(aws.getAttribute("encrypt-bucket"));
+			}
 		}
 		int azureSz = doc.getElementsByTagName("azure-store").getLength();
 		if (azureSz > 0) {
@@ -300,7 +306,6 @@ public synchronized static void parseSDFSConfigFile(String fileName, String pass
 			Main.cloudBucket = azure.getAttribute("azure-bucket-name");
 			Main.cloudChunkStore = Boolean.parseBoolean(azure.getAttribute("enabled"));
 		}
-		
 
 		if (password != null) {
 			if (Main.cloudSecretKey != null) {
@@ -326,6 +331,12 @@ public synchronized static void parseSDFSConfigFile(String fileName, String pass
 				}
 
 			}
+
+		}
+		if (Main.usePortRedirector) {
+			Main.sdfsCliRequireMutualTLSAuth = false;
+			Main.sdfsCliSSL = false;
+			Main.sdfsCliListenAddr = "localhost";
 		}
 		if (Main.chunkStoreEncryptionEnabled)
 			SDFSLogger.getLog().info("################## Encryption is enabled ##################");
@@ -382,13 +393,18 @@ public synchronized static Document getSDFSConfigFile(String fileName, boolean d
 
 		Element cli = (Element) doc.getElementsByTagName("sdfscli").item(0);
 		cli.setAttribute("enable", Boolean.toString(Main.sdfsCliEnabled));
+
 		cli.setAttribute("password", Main.sdfsPassword);
 		cli.setAttribute("salt", Main.sdfsPasswordSalt);
 		cli.setAttribute("port", Integer.toString(Main.sdfsCliPort));
+		cli.setAttribute("immutabilityPeriod", Integer.toString(Main.immutabilityPeriod));
 		cli.setAttribute("enable-auth", Boolean.toString(Main.sdfsCliRequireAuth));
 		cli.setAttribute("listen-address", Main.sdfsCliListenAddr);
-		cli.setAttribute("auth-utility-jar-file-path", Main.jarFilePath);
-		cli.setAttribute("auth-class-info", Main.classInfo);
+		cli.setAttribute("auth-utility-jar-file-path", Main.authJarFilePath);
+		cli.setAttribute("auth-class-info", Main.authClassInfo);
+		cli.setAttribute("prod-config-file-path", Main.prodConfigFilePath);
+		cli.setAttribute("prod-config-variable", Main.prodConfigVariable);
+		cli.setAttribute("use-ssl", Boolean.toString(Main.sdfsCliSSL));
 
 		Element localChunkStore = (Element) doc.getElementsByTagName("local-chunkstore").item(0);
 		if (localChunkStore.getElementsByTagName("extended-config").getLength() > 0) {
@@ -420,6 +436,7 @@ public synchronized static Document getSDFSConfigFile(String fileName, boolean d
 			if (awsSz > 0) {
 				Element aws = (Element) localChunkStore.getElementsByTagName("aws").item(0);
 				aws.setAttribute("aws-secret-key", Main.eCloudSecretKey);
+				aws.setAttribute("s3-compatible-target", Boolean.toString(Main.s3ApiCompatible));
 			}
 			if (azureSz > 0) {
 				Element azure = (Element) doc.getElementsByTagName("azure-store").item(0);
@@ -429,4 +446,83 @@ public synchronized static Document getSDFSConfigFile(String fileName, boolean d
 		return doc;
 	}
 
+
+/**
+ * updates the config with new credentials
+ *
+ * @param fileName
+ * @throws Exception
+ */
+public synchronized static int updateCloudCreds() throws Exception {
+
+	File file = new File(OSValidator.getConfigPath() + Main.sdfsVolName.trim() + "-volume-cfg.xml");
+	if (!file.exists()) {
+		System.out.println("Volume doesn't exist, please provide a valid volume.");
+		return -1;
+	}
+	
+	DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+	DocumentBuilder db = dbf.newDocumentBuilder();
+	Document doc = db.parse(file);
+
+	Element localChunkStore = (Element) doc.getElementsByTagName("local-chunkstore").item(0);
+	
+	Element sdfsCli = (Element) doc.getElementsByTagName("sdfscli").item(0);
+	if((sdfsCli.getAttribute("encrypt-config")).equals("true"))
+	{
+		if(Main.sdfsPassword.isEmpty())
+		{
+			System.out.println("--encrypt-config is required"
+								+ " as the volume's cloud keys were encrypted during original volume creation.");
+			return -1;
+		}
+
+		String password = Main.sdfsPassword;
+		String iv = localChunkStore.getAttribute("encryption-iv");
+		Main.chunkStoreEncryptionIV = iv;
+		byte[] ec = EncryptUtils.encryptCBC(Main.cloudSecretKey.getBytes(), password, iv);
+		Main.cloudSecretKey = BaseEncoding.base64Url().encode(ec);
+	}
+
+	int awsSz = localChunkStore.getElementsByTagName("aws").getLength();
+	int googleSz = localChunkStore.getElementsByTagName("google-store").getLength();
+	int azureSz = doc.getElementsByTagName("azure-store").getLength();
+
+	if (awsSz > 0) {
+		Element aws = (Element) doc.getElementsByTagName("aws").item(0);
+		aws.setAttribute("aws-secret-key", Main.cloudSecretKey);
+		aws.setAttribute("aws-access-key", Main.cloudAccessKey);
+	}
+	else if (azureSz > 0) {
+		Element azure = (Element) doc.getElementsByTagName("azure-store").item(0);
+		azure.setAttribute("azure-secret-key", Main.cloudSecretKey);
+		azure.setAttribute("azure-access-key", Main.cloudAccessKey);
+	}
+	else if (googleSz > 0) {
+		Element google = (Element) doc.getElementsByTagName("google-store").item(0);
+		google.setAttribute("gs-secret-key", Main.cloudSecretKey);
+		google.setAttribute("gs-access-key", Main.cloudAccessKey);
+	}
+	else {
+		System.out.println("Not a valid cloud target");
+		return -1;
+	}
+
+	try {
+		// Prepare the DOM document for writing
+		Source source = new DOMSource(doc);
+
+		Result result = new StreamResult(file);
+
+		// Write the DOM document to the file
+		Transformer xformer = TransformerFactory.newInstance().newTransformer();
+		xformer.transform(source, result);
+	} catch (Exception e) {
+		SDFSLogger.getLog().error("Unable to update the cloud credentials ", e);
+		return -1;
+	}
+	
+	return 1;
+}
+
 }
diff --git a/src/org/opendedup/sdfs/Main.java b/src/org/opendedup/sdfs/Main.java
index 62d48ba4d..e749343dc 100755
--- a/src/org/opendedup/sdfs/Main.java
+++ b/src/org/opendedup/sdfs/Main.java
@@ -28,15 +28,19 @@ public class Main {
 	public static boolean checkArchiveOnRead = true;
 	public static int hashSeed=6442;
 	public static double fpp = .01;
-	public static String jarFilePath="";
-	public static String classInfo="";
-	public static String logSize="10MB";
-	public static int logFiles=10;
 	public static boolean ignoreDSEHTSize = true;
 	public static long GLOBAL_CACHE_SIZE=512*1024L*1024L;
 	public static int readAheadThreads = 16;
 	public static boolean refCount = true;
 	public static boolean useLegacy = false;
+	public static String authJarFilePath="";
+	public static String authClassInfo="";
+	public static String prodConfigFilePath = "";
+	public static String prodConfigVariable = "";
+	public static boolean s3ApiCompatible = false;
+	public static int immutabilityPeriod=10;//by default set to 10 days
+	public static boolean encryptBucket = false;
+	public static boolean rehydrateBlobs = false;
 
 	public static int parallelDBCount = 4;
 	public static int writeTimeoutSeconds = -1; // 1 hour timeout
@@ -59,6 +63,8 @@ public class Main {
 	public static StandAloneGCScheduler pFullSched = null;
 
 	public static String logPath = "/var/log/sdfs/sdfs.log";
+	public static String logSize="10MB";
+	public static int logFiles=10;
 	public static byte MAPVERSION = 0;
 	public static int MAX_OPEN_SST_FILES=-1;
 	public static String sdfsPassword = "";
@@ -78,6 +84,7 @@ public class Main {
 	public static boolean forceCompact = false;
 	public static int MAX_REPL_BATCH_SZ = 128;
 	public static String sdfsBasePath = "";
+	public static String volumeConfigFile = "";
 
 	public static SDFSEvent mountEvent = null;
 
@@ -106,6 +113,8 @@ public class Main {
 	 */
 	public static String chunkStore = "";
 
+	public static boolean usePortRedirector;
+
 	/**
 	 * Future implementation for pluggable chunkstores
 	 */
@@ -149,6 +158,12 @@ public class Main {
 	public static String lookupfilterStore = null;
 	public static String dedupDBTrashStore = null;
 	public static boolean DDB_TRASH_ENABLED = false;
+	public static boolean sdfsSyncEnabled = false;
+	public static boolean runConsistancyCheckPeriodically = false;
+	public static String sdfsVolName = "";
+	public static String retrievalTier = "";
+	public static long CLEANUP_THREAD_INTERVAL=30*1000;
+	public static boolean PRINT_CACHESTATS=true;
 	/**
 	 * The location where the model of the virtual file structure will be held.
 	 * The virtual file structure maps what will be presented as the filesystem
@@ -309,7 +324,7 @@ public class Main {
 	public static boolean useAim;
 
 	/** Azure login info **/
-	
+
 	public static boolean AZUREChunkStore = false;
 	public static String AZURE_ACCOUNT_NAME = "MyAccountName";
 	public static String AZURE_ACCOUNT_KEY = "MyAccountKey";
diff --git a/src/org/opendedup/sdfs/VolumeConfigWriter.java b/src/org/opendedup/sdfs/VolumeConfigWriter.java
index 0b07ce7ba..5044e61ac 100644
--- a/src/org/opendedup/sdfs/VolumeConfigWriter.java
+++ b/src/org/opendedup/sdfs/VolumeConfigWriter.java
@@ -6,6 +6,7 @@
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.Arrays;
 import java.util.Random;
 
 import javax.xml.parsers.DocumentBuilder;
@@ -35,6 +36,9 @@
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
+import com.amazonaws.auth.BasicAWSCredentials;
+import com.amazonaws.services.s3.AmazonS3Client;
+
 import com.google.common.io.BaseEncoding;
 
 public class VolumeConfigWriter {
@@ -54,8 +58,6 @@ public class VolumeConfigWriter {
 	boolean safe_close = true;
 	boolean vrts_appliance = false;
 	boolean safe_sync = true;
-	String jarFilePath = "";
-	String classInfo = "";
 	int write_threads = (short) (Runtime.getRuntime().availableProcessors());
 	boolean dedup_files = true;
 	int chunk_size = 256;
@@ -69,6 +71,7 @@ public class VolumeConfigWriter {
 	String owner = "0";
 	String group = "0";
 	boolean simpleS3 = false;
+	boolean encryptBucket = false;
 	String volume_capacity = null;
 	int avgPgSz = 8192;
 	boolean mdCompresstion = false;
@@ -80,7 +83,7 @@ public class VolumeConfigWriter {
 	// String fdisk_schedule = "0 59 23 * * ?";
 	String fdisk_schedule = "0 0 12 ? * SUN";
 	String ltrfdisk_schedule = "0 15 10 L * ?";
-	String syncfs_schedule = "4 59 23 * * ?";
+	String syncfs_schedule = null;
 	private String dExt = null;
 	boolean azureEnabled = false;
 	boolean tcpKeepAlive = true;
@@ -93,6 +96,7 @@ public class VolumeConfigWriter {
 	int maxSegSize = 32;
 	int windowSize = 48;
 	int cloudThreads = 8;
+	int immutabilityPeriod = 10;
 	private int glacierInDays = 0;
 	private int aruzreArchiveInDays = 0;
 	private String azurestorageTier = null;
@@ -102,13 +106,18 @@ public class VolumeConfigWriter {
 	String chunk_store_encryption_key = PassPhrase.getNext();
 	String chunk_store_iv = PassPhrase.getIV();
 	boolean chunk_store_encrypt = false;
-	String hashType = HashFunctionPool.VARIABLE_MD5;
+	String hashType = HashFunctionPool.VARIABLE_SHA256;
 	String chunk_store_class = "org.opendedup.sdfs.filestore.BatchFileChunkStore";
 	String gc_class = "org.opendedup.sdfs.filestore.gc.PFullGC";
 	String hash_db_class = Main.hashesDBClass;
 	String sdfsCliPassword = "admin";
 	String sdfsCliSalt = HashFunctions.getRandomString(24);
 	String sdfsCliListenAddr = "0.0.0.0";
+	String authJarFilePath = "";
+	String authClassInfo = "";
+	String prodConfigFilePath = "";
+	String prodConfigVariable = "";
+	boolean s3ApiCompatible = false;
 	boolean sdfsCliSSL = true;
 	boolean sdfsCliRequireAuth = false;
 	boolean sdfsCliRequireMutualTLSAuth = false;
@@ -146,7 +155,7 @@ public class VolumeConfigWriter {
 	private String subscription;
 	private String gcpProject;
 	private String permissionsFile;
-	private long rmthreashold = 15 * 60 * 1000;
+	private long rmthreashold = 5 * 60 * 1000;
 	private String sdfsBasePath = "";
 
 	public VolumeConfigWriter() {
@@ -163,6 +172,31 @@ public void parseCmdLine(String[] args) throws Exception {
 			printHelp(options);
 			System.exit(1);
 		}
+		if (cmd.hasOption("update-cloud-creds")) {
+			System.out.println("Updating cloud credentials...");
+			if (!cmd.hasOption("volume-name") || !cmd.hasOption("cloud-access-key") ||
+					!cmd.hasOption("cloud-secret-key")) {
+				System.out.println("--volume-name, --cloud-access-key and --cloud-secret-key are required");
+				printHelp(options);
+				System.exit(-1);
+			}
+
+			Main.sdfsVolName = cmd.getOptionValue("volume-name");
+			Main.cloudAccessKey = cmd.getOptionValue("cloud-access-key");
+			Main.cloudSecretKey = cmd.getOptionValue("cloud-secret-key");
+
+			if (cmd.hasOption("encrypt-config"))
+				Main.sdfsPassword = cmd.getOptionValue("encrypt-config");
+
+			if (cmd.hasOption("chunk-store-encryption-key"))
+				Main.chunkStoreEncryptionKey = cmd.getOptionValue("chunk-store-encryption-key");
+			else
+				Main.chunkStoreEncryptionKey = this.chunk_store_encryption_key;
+
+			int returnCode = Config.updateCloudCreds();
+			System.exit(returnCode);
+		}
+		
 		if (cmd.hasOption("encrypt-config")) {
 			if (cmd.getOptionValue("encrypt-config").length() < 6) {
 				System.out.println("--encrypt-config must be greater than 6 characters");
@@ -200,9 +234,17 @@ public void parseCmdLine(String[] args) throws Exception {
 		if (cmd.hasOption("sdfscli-listen-addr"))
 			this.sdfsCliListenAddr = cmd.getOptionValue("sdfscli-listen-addr");
 		if (cmd.hasOption("auth-utility-jar-file-path"))
-			this.jarFilePath = cmd.getOptionValue("auth-utility-jar-file-path");
+			this.authJarFilePath = cmd.getOptionValue("auth-utility-jar-file-path");
 		if (cmd.hasOption("auth-class-info"))
-			this.classInfo = cmd.getOptionValue("auth-class-info");
+			this.authClassInfo = cmd.getOptionValue("auth-class-info");
+		if (cmd.hasOption("prod-config-file-path"))
+			this.prodConfigFilePath = cmd.getOptionValue("prod-config-file-path");
+		if (cmd.hasOption("prod-config-variable"))
+			this.prodConfigVariable = cmd.getOptionValue("prod-config-variable");
+		if (cmd.hasOption("s3-compatible-target"))
+			this.s3ApiCompatible = Boolean.parseBoolean(cmd.getOptionValue("s3-compatible-target"));
+		if (cmd.hasOption("immutabilityPeriod"))
+			this.immutabilityPeriod = Integer.parseInt(cmd.getOptionValue("immutabilityPeriod"));
 		if (cmd.hasOption("sdfs-base-path"))
 			this.sdfsBasePath = cmd.getOptionValue("sdfs-base-path");
 		Main.sdfsBasePath = this.sdfsBasePath;
@@ -277,9 +319,21 @@ public void parseCmdLine(String[] args) throws Exception {
 		}
 		if (cmd.hasOption("dedup-db-store")) {
 			this.dedup_db_store = cmd.getOptionValue("dedup-db-store");
+			if (OSValidator.isUnix()) {
+				this.dedup_db_store = this.dedup_db_store + File.separator + "." + volume_name + File.separator + "ddb";
+			} else {
+				this.dedup_db_store = this.dedup_db_store + File.separator + volume_name + File.separator + "ddb";
+			}
 		}
 		if (cmd.hasOption("dedup-dbtrash-store")) {
 			this.dedup_dbtrash_store = cmd.getOptionValue("dedup-dbtrash-store");
+			if (cmd.hasOption("azure-storage-tier")) {
+				String cln = cmd.getOptionValue("azure-storage-tier");
+				if (cln.equalsIgnoreCase("hot") || cln.equalsIgnoreCase("cool")
+						|| cln.equalsIgnoreCase("archive")) {
+					this.azurestorageTier = cln;
+				}
+			}
 		}
 		if (cmd.hasOption("enable-batch-gc")) {
 			this.dedup_db_trash_enabled = true;
@@ -370,6 +424,13 @@ public void parseCmdLine(String[] args) throws Exception {
 			this.aruzreArchiveInDays = Integer.parseInt(cmd.getOptionValue("azurearchive-in-days"));
 			this.azurestorageTier = "archive";
 			this.refreshBlobs = true;
+			if (cmd.hasOption("azure-storage-tier")) {
+				String cln = cmd.getOptionValue("azure-storage-tier");
+				if (cln.equalsIgnoreCase("hot") || cln.equalsIgnoreCase("cool")
+						|| cln.equalsIgnoreCase("archive")) {
+					this.azurestorageTier = cln;
+				}
+			}
 		}
 
 		if (cmd.hasOption("no-simple-metadata")) {
@@ -421,6 +482,15 @@ public void parseCmdLine(String[] args) throws Exception {
 		}
 		if (cmd.hasOption("chunk-store-hashdb-location")) {
 			this.chunk_store_hashdb_location = cmd.getOptionValue("chunk-store-hashdb-location");
+			if (OSValidator.isUnix()) {
+				this.chunk_store_hashdb_location = this.chunk_store_hashdb_location + File.separator + "." + volume_name
+						+ File.separator + "chunkstore" + File.separator + "hdb-"
+						+ this.sn;
+			} else {
+				this.chunk_store_hashdb_location = this.chunk_store_hashdb_location + File.separator + volume_name
+						+ File.separator + "chunkstore" + File.separator + "hdb-"
+						+ this.sn;
+			}
 		}
 		if (cmd.hasOption("chunk-store-hashdb-class")) {
 			this.hash_db_class = cmd.getOptionValue("chunk-store-hashdb-class");
@@ -476,6 +546,33 @@ public void parseCmdLine(String[] args) throws Exception {
 					this.simpleS3 = true;
 					this.usebasicsigner = true;
 				}
+
+				if (cmd.hasOption("encrypt-bucket") && this.awsEnabled && !this.s3ApiCompatible) {
+					BasicAWSCredentials creds = null;
+					try {
+						creds = new BasicAWSCredentials(this.cloudAccessKey, this.cloudSecretKey);
+						AmazonS3Client s3Service = new AmazonS3Client(creds);
+						if (!s3Service.doesBucketExist(this.cloudBucketName))
+							this.encryptBucket = true;
+						else {
+							String result = s3Service.getBucketEncryption(this.cloudBucketName).toString();
+							if (result.contains("AES256"))
+								this.encryptBucket = true;
+							else
+								System.out.println(
+										"Warn : Unable to set AES256 encryption as bucket already exists without ServerSideEncryption enabled.");
+							this.encryptBucket = false;
+						}
+					} catch (Exception e) {
+						if (e.toString().contains("ServerSideEncryptionConfigurationNotFound"))
+							this.encryptBucket = false;
+						else {
+							System.err.println("Unable to authenticate to AWS " + e.toString());
+							e.printStackTrace();
+							System.exit(-1);
+						}
+					}
+				}
 				/*
 				 * if (!this.aliEnabled && !minIOEnabled && !awsAim &&
 				 * !cmd.hasOption("cloud-disable-test") &&
@@ -524,6 +621,10 @@ else if (this.azureEnabled) {
 				System.exit(-1);
 			}
 		}
+
+		byte[] b = new byte[16];
+		b = Arrays.copyOf(this.cloudBucketName.getBytes(), 16);
+		this.chunk_store_iv = StringUtils.getHexString(b);
 		if (cmd.hasOption("chunk-store-io-threads")) {
 			this.cloudThreads = Integer.parseInt(cmd.getOptionValue("chunk-store-io-threads"));
 		}
@@ -638,6 +739,10 @@ public void writeConfigFile() throws ParserConfigurationException, IOException {
 			this.chunk_store_encryption_key = BaseEncoding.base64Url().encode(ec);
 			ec = EncryptUtils.encryptCBC(this.cloudSecretKey.getBytes(), password, iv);
 			this.cloudSecretKey = BaseEncoding.base64Url().encode(ec);
+			ec = EncryptUtils.encryptCBC(this.sdfsCliPassword.getBytes(), password, iv);
+			this.sdfsCliPassword = BaseEncoding.base64Url().encode(ec);
+			ec = EncryptUtils.encryptCBC(this.sdfsCliSalt.getBytes(), password, iv);
+			this.sdfsCliSalt = BaseEncoding.base64Url().encode(ec);
 		}
 
 		if (vrts_appliance) {
@@ -752,10 +857,13 @@ public void writeConfigFile() throws ParserConfigurationException, IOException {
 		sdfscli.setAttribute("enable-auth", Boolean.toString(this.sdfsCliRequireAuth));
 		sdfscli.setAttribute("enable-mutual-tls-auth", Boolean.toString(this.sdfsCliRequireMutualTLSAuth));
 		sdfscli.setAttribute("listen-address", this.sdfsCliListenAddr);
-		sdfscli.setAttribute("auth-utility-jar-file-path", this.jarFilePath);
-		sdfscli.setAttribute("auth-class-info", this.classInfo);
+		sdfscli.setAttribute("auth-utility-jar-file-path", this.authJarFilePath);
+		sdfscli.setAttribute("auth-class-info", this.authClassInfo);
+		sdfscli.setAttribute("prod-config-file-path", this.prodConfigFilePath);
+		sdfscli.setAttribute("prod-config-variable", this.prodConfigVariable);
 		sdfscli.setAttribute("use-ssl", Boolean.toString(this.sdfsCliSSL));
 		sdfscli.setAttribute("permissions-file", this.permissionsFile);
+		sdfscli.setAttribute("encrypt-config", Boolean.toString(this.encryptConfig));
 		try {
 			sdfscli.setAttribute("password",
 					HashFunctions.getSHAHash(this.sdfsCliPassword.getBytes(), this.sdfsCliSalt.getBytes()));
@@ -766,6 +874,7 @@ public void writeConfigFile() throws ParserConfigurationException, IOException {
 		}
 		sdfscli.setAttribute("salt", this.sdfsCliSalt);
 		sdfscli.setAttribute("port", Integer.toString(this.sdfsCliPort));
+		sdfscli.setAttribute("immutabilityPeriod", Integer.toString(this.immutabilityPeriod));
 		sdfscli.setAttribute("enable", Boolean.toString(this.sdfsCliEnabled));
 
 		root.appendChild(sdfscli);
@@ -795,7 +904,9 @@ public void writeConfigFile() throws ParserConfigurationException, IOException {
 			extended.setAttribute("map-cache-size", "200");
 			extended.setAttribute("io-threads", "16");
 			extended.setAttribute("delete-unclaimed", "true");
-			extended.setAttribute("sync-check-schedule", syncfs_schedule);
+			if (syncfs_schedule != null) {
+				extended.setAttribute("sync-check-schedule", syncfs_schedule);
+			}
 			extended.setAttribute("backlog-size", this.backlogSize);
 			cs.appendChild(extended);
 
@@ -806,6 +917,7 @@ else if (this.awsEnabled || this.minIOEnabled) {
 			Element aws = xmldoc.createElement("aws");
 			aws.setAttribute("enabled", "true");
 			aws.setAttribute("aws-aim", Boolean.toString(this.awsAim));
+			aws.setAttribute("s3-compatible-target", Boolean.toString(this.s3ApiCompatible));
 			if (!awsAim) {
 				aws.setAttribute("aws-access-key", this.cloudAccessKey);
 				aws.setAttribute("aws-secret-key", this.cloudSecretKey);
@@ -834,7 +946,9 @@ else if (this.awsEnabled || this.minIOEnabled) {
 				extended.setAttribute("glacier-archive-days", Integer.toString(this.glacierInDays));
 				extended.setAttribute("glacier-tier", this.glacierClass);
 				extended.setAttribute("simple-metadata", Boolean.toString(this.simpleMD));
-				extended.setAttribute("sync-check-schedule", syncfs_schedule);
+				if (syncfs_schedule != null) {
+					extended.setAttribute("sync-check-schedule", syncfs_schedule);
+				}
 				extended.setAttribute("use-basic-signer", Boolean.toString(this.usebasicsigner));
 				extended.setAttribute("backlog-size", this.backlogSize);
 				if (this.genericS3) {
@@ -844,9 +958,13 @@ else if (this.awsEnabled || this.minIOEnabled) {
 
 					extended.appendChild(cp);
 				}
-				if (this.simpleS3)
+				if (this.simpleS3) {
 					extended.setAttribute("simple-s3", "true");
-				else
+					if (this.encryptBucket)
+						aws.setAttribute("encrypt-bucket", "true");
+					else
+						aws.setAttribute("encrypt-bucket", "false");
+				} else
 					extended.setAttribute("simple-s3", "false");
 				if (this.basicS3Signer)
 					extended.setAttribute("use-basic-signer", "true");
@@ -891,7 +1009,9 @@ else if (this.awsEnabled || this.minIOEnabled) {
 				extended.setAttribute("map-cache-size", "100");
 				extended.setAttribute("io-threads", "16");
 				extended.setAttribute("delete-unclaimed", "true");
-				extended.setAttribute("sync-check-schedule", syncfs_schedule);
+				if (syncfs_schedule != null) {
+					extended.setAttribute("sync-check-schedule", syncfs_schedule);
+				}
 				extended.setAttribute("backlog-size", this.backlogSize);
 				if (this.bucketLocation != null)
 					extended.setAttribute("default-bucket-location", this.bucketLocation);
@@ -922,7 +1042,9 @@ else if (this.awsEnabled || this.minIOEnabled) {
 				extended.setAttribute("map-cache-size", "100");
 				extended.setAttribute("io-threads", "16");
 				extended.setAttribute("delete-unclaimed", "true");
-				extended.setAttribute("sync-check-schedule", syncfs_schedule);
+				if (syncfs_schedule != null) {
+					extended.setAttribute("sync-check-schedule", syncfs_schedule);
+				}
 				extended.setAttribute("azure-tier-in-days", Integer.toString(aruzreArchiveInDays));
 				extended.setAttribute("backlog-size", this.backlogSize);
 				if (this.azurestorageTier != null) {
@@ -1011,6 +1133,34 @@ public static Options buildOptions() {
 				.withDescription(
 						"IP Listenting address for the sdfscli management interface. This defaults to \"localhost\"")
 				.hasArg(true).withArgName("ip address or host name").create());
+		options.addOption(OptionBuilder.withLongOpt("auth-utility-jar-file-path")
+				.withDescription(
+						"Authentication Utility jar file path."
+								+ " \n e.g. --auth-utility-jar-file-path=C:\\odd\\utilitly\\tool.jar")
+				.hasArg(true).withArgName("AUTH-JAR-PATH").create());
+		options.addOption(OptionBuilder.withLongOpt("auth-class-info")
+				.withDescription(
+						"Authentication Class to load and its methods separated by ;;."
+								+ " \n e.g.--auth-class-info=com.odd.KeyInfo;;getInfo1;;getInfo2")
+				.hasArg(true).withArgName("AUTH-CLASS-INFO").create());
+		options.addOption(OptionBuilder.withLongOpt("prod-config-file-path")
+				.withDescription(
+						"Product configuration file path.")
+				.hasArg(true).withArgName("CONFIG-FILE-PATH").create());
+		options.addOption(OptionBuilder.withLongOpt("prod-config-variable")
+				.withDescription(
+						"Product configuration variable.")
+				.hasArg(true).withArgName("CONF-VARIABLE").create());
+		options.addOption(OptionBuilder.withLongOpt("s3-compatible-target")
+				.withDescription(
+						"Set it to true to specify volume is S3 compatible cloud target (Defaults to false for Amazon S3).")
+				.hasArg(true).withArgName("true|false").create());
+		options.addOption(OptionBuilder.withLongOpt("immutabilityPeriod")
+				.withDescription("Set it to specify the immutability period of the files to x number of days.")
+				.hasArg(true)
+				.withArgName("number of days e.g. 10").create());
+		options.addOption(OptionBuilder.withLongOpt("update-cloud-creds")
+				.withDescription("If set, the volumes cloud credentials will be updated.").create());
 		options.addOption(OptionBuilder.withLongOpt("hashtable-rm-threshold").withDescription(
 				"The threashold in milliseconds to wait for unclaimed chucks to be available for garbage collection"
 						+ "The default is 15 minutes or 900000 ms,")
@@ -1018,16 +1168,16 @@ public static Options buildOptions() {
 		options.addOption(OptionBuilder.withLongOpt("sdfs-base-path").withDescription(
 				"Folder basepath for sdfs to be used in linux os.\n Defaults to: \n " + OSValidator.getConfigPath())
 				.hasArgs().withArgName("PATH").create());
-		options.addOption(OptionBuilder.withLongOpt("auth-utility-jar-file-path")
-				.withDescription("Utility jar file path.").hasArg(true).withArgName("JAR-PATH").create());
-		options.addOption(OptionBuilder.withLongOpt("auth-class-info")
-				.withDescription("Class to load and its methods separated by ;;.").hasArg(true)
-				.withArgName("CLASS-INFO").create());
 		options.addOption(
 				OptionBuilder.withLongOpt("base-path")
 						.withDescription("the folder path for all volume data and meta data.\n Defaults to: \n "
 								+ OSValidator.getProgramBasePath() + "")
 						.hasArgs().withArgName("PATH").create());
+		options.addOption(
+				OptionBuilder.withLongOpt("sdfs-base-path")
+						.withDescription("Folder basepath for sdfs to be used in linux os.\n Defaults to: \n "
+								+ OSValidator.getConfigPath())
+						.hasArgs().withArgName("PATH").create());
 		options.addOption(OptionBuilder.withLongOpt("cloud-url")
 				.withDescription("The url of the blob server. e.g. http://s3server.localdomain/s3/").hasArg()
 				.withArgName("url").create());
@@ -1179,6 +1329,9 @@ public static Options buildOptions() {
 		options.addOption(OptionBuilder.withLongOpt("encrypt-config")
 				.withDescription("Encrypt security sensitive encryption parameters with the password provided")
 				.hasArg(true).withArgName("a password").create());
+		options.addOption(OptionBuilder.withLongOpt("encrypt-bucket").withDescription(
+				"Set to enable server-side encryption by deafult(AES256 SSE Algorithm) on the bucket in Amazon S3 Cloud Storage. ")
+				.hasArg(false).create());
 		options.addOption(OptionBuilder.withLongOpt("aws-enabled").withDescription(
 				"Set to true to enable this volume to store to Amazon S3 Cloud Storage. cloud-secret-key, cloud-access-key, and cloud-bucket-name will also need to be set. ")
 				.hasArg().withArgName("true|false").create());
@@ -1224,6 +1377,9 @@ public static Options buildOptions() {
 		options.addOption(OptionBuilder.withLongOpt("azure-enabled").withDescription(
 				"Set to true to enable this volume to store to Microsoft Azure Cloud Storage. cloud-secret-key, cloud-access-key, and cloud-bucket-name will also need to be set. ")
 				.hasArg().withArgName("true|false").create());
+		options.addOption(OptionBuilder.withLongOpt("azure-storage-tier")
+				.withDescription("Set the tier type to move from hot storage tier. ").hasArg()
+				.withArgName("hot|cool|archive").create());
 		options.addOption(OptionBuilder.withLongOpt("glacier-restore-class")
 				.withDescription("Set the class used to restore glacier data. ").hasArg()
 				.withArgName("expedited|standard|bulk").create());
diff --git a/src/org/opendedup/sdfs/filestore/AbstractChunkStore.java b/src/org/opendedup/sdfs/filestore/AbstractChunkStore.java
index 5f735605a..6d372560e 100644
--- a/src/org/opendedup/sdfs/filestore/AbstractChunkStore.java
+++ b/src/org/opendedup/sdfs/filestore/AbstractChunkStore.java
@@ -3,23 +3,24 @@
 import java.io.IOException;
 
 import org.opendedup.collections.DataArchivedException;
+import org.opendedup.collections.InsertRecord;
 import org.w3c.dom.Element;
 
 /**
- * 
+ *
  * @author Sam Silverberg The AbstractChunkStore is used as in interface to
  *         store deduped chunks of data from clients to disk or some other
  *         storage device or service for later retrieval. Within the chunk store
  *         service itself data passes as follows
- * 
+ *
  *         client -> TCP -> Client Thread ->HashChunkService -> TCHashStore ->
  *         AbstactChunkStore
- * 
+ *
  * @see FileChunkStore
  * @see S3ChunkStore
  * @see NullChunkStore
  * @see TCChunkStore
- * 
+ *
  */
 
 public interface AbstractChunkStore {
@@ -62,31 +63,31 @@ public interface AbstractChunkStore {
 
 	/**
 	 * Each chunk store must have a unique name.
-	 * 
+	 *
 	 * @return returns the unique name of the chunk store
 	 */
 	public abstract String getName();
 
 	/**
 	 * Sets the name of the chunk store
-	 * 
+	 *
 	 * @param name
-	 *            the name of the chunk store.
+	 *             the name of the chunk store.
 	 */
 	public abstract void setName(String name);
 
 	/**
-	 * 
+	 *
 	 * @return Returns the size of the chunk store on disk or service
 	 */
 	public abstract long size();
 
 	/**
-	 * 
+	 *
 	 * @return The size of the chunkstore compressed
 	 */
 	public abstract long compressedSize();
-	
+
 	public abstract void clearCounters();
 
 	public abstract long maxSize();
@@ -94,13 +95,13 @@ public interface AbstractChunkStore {
 	public abstract void sync() throws IOException;
 
 	/**
-	 * 
+	 *
 	 * @return bytes read since chunk store was started
 	 */
 	public abstract long bytesRead();
 
 	/**
-	 * 
+	 *
 	 * @return returns bytes Written since chunk store was started
 	 */
 
@@ -109,7 +110,7 @@ public interface AbstractChunkStore {
 	/**
 	 * reserves a write position within the chunk store for later use. If
 	 * implemented but unused this should return 0
-	 * 
+	 *
 	 * @param len
 	 *            the length of the chunk that will be stored
 	 * @return the position with the chunk store where the chunk will be written
@@ -119,31 +120,31 @@ public interface AbstractChunkStore {
 
 	/**
 	 * writes the chunk to the chunk store
-	 * 
+	 *
 	 * @param hash
-	 *            the unique (md5 or SHA) hash for the data stored.
+	 *              the unique (md5 or SHA) hash for the data stored.
 	 * @param chunk
-	 *            the actual data to be stored
+	 *              the actual data to be stored
 	 * @param len
-	 *            the length of the data to be stored
+	 *              the length of the data to be stored
 	 * @param start
-	 *            the position within the chunk store that the chunk should be
-	 *            stored at
+	 *              the position within the chunk store that the chunk should be
+	 *              stored at
 	 * @throws IOException
 	 */
-	public abstract long writeChunk(byte[] hash, byte[] chunk, int len,String uuid)
-			throws IOException ;
+	public abstract InsertRecord writeChunk(byte[] hash, byte[] chunk, int len, String uuid)
+			throws IOException;
 
 	/**
 	 * gets a chunk of data from the chunk store
-	 * 
+	 *
 	 * @param hash
-	 *            hash the unique (md5 or SHA) hash for the data requested
+	 *              hash the unique (md5 or SHA) hash for the data requested
 	 * @param start
-	 *            the position within the chunk store that the chunk should be
-	 *            located
+	 *              the position within the chunk store that the chunk should be
+	 *              located
 	 * @param len
-	 *            the length of the data
+	 *              the length of the data
 	 * @return the chunk of data requested
 	 * @throws IOException
 	 */
@@ -152,10 +153,10 @@ public abstract byte[] getChunk(byte[] hash, long start, int len)
 
 	/**
 	 * tunes the chunk store to a specific size
-	 * 
+	 *
 	 * @param length
-	 *            the space that should be allocated on disk for this chunk
-	 *            store.
+	 *               the space that should be allocated on disk for this chunk
+	 *               store.
 	 * @throws IOException
 	 */
 
@@ -166,7 +167,7 @@ public abstract void deleteDuplicate(byte[] hash, long start, int len)
 			throws IOException;
 
 	public abstract ChunkData getNextChunck() throws IOException;
-	
+
 	public abstract long getAllObjSummary(String pp, long id) throws IOException;
 
 	public abstract void iterationInit(boolean getchunks) throws IOException;
@@ -174,4 +175,8 @@ public abstract void deleteDuplicate(byte[] hash, long start, int len)
 	public abstract void cacheData(long start)
 			throws IOException, DataArchivedException;
 
+	public boolean get_move_blob();
+
+	public void set_move_blob(boolean status);
+
 }
diff --git a/src/org/opendedup/sdfs/filestore/BatchFileChunkStore.java b/src/org/opendedup/sdfs/filestore/BatchFileChunkStore.java
index 2a5601b80..2b77330d0 100644
--- a/src/org/opendedup/sdfs/filestore/BatchFileChunkStore.java
+++ b/src/org/opendedup/sdfs/filestore/BatchFileChunkStore.java
@@ -1,5 +1,6 @@
 package org.opendedup.sdfs.filestore;
 
+import java.io.EOFException;
 import java.io.File;
 
 import java.io.FileInputStream;
@@ -29,15 +30,16 @@
 import com.google.common.io.BaseEncoding;
 
 import org.opendedup.collections.HashExistsException;
+import org.opendedup.collections.InsertRecord;
 
 /**
- * 
+ *
  * @author Sam Silverberg The S3 chunk store implements the AbstractChunkStore
  *         and is used to store deduped chunks to AWS S3 data storage. It is
  *         used if the aws tag is used within the chunk store config file. It is
  *         important to make the chunk size very large on the client when using
  *         this chunk store since S3 charges per http request.
- * 
+ *
  */
 public class BatchFileChunkStore implements AbstractChunkStore, AbstractBatchStore, Runnable {
 	private String name;
@@ -140,7 +142,7 @@ public void cacheData(long len) throws IOException, DataArchivedException {
 	}
 
 	@Override
-	public long writeChunk(byte[] hash, byte[] chunk, int len, String uuid) throws IOException {
+	public InsertRecord writeChunk(byte[] hash, byte[] chunk, int len, String uuid) throws IOException {
 		try {
 			return HashBlobArchive.writeBlock(hash, chunk, uuid);
 		} catch (HashExistsException e) {
@@ -246,37 +248,46 @@ public void init(Element config) throws IOException {
 		if (config.hasAttribute("map-version")) {
 			this.mdVersion = Integer.parseInt(config.getAttribute("map-version"));
 		}
-
-		try {
-			File f = new File(this.container_location, "BucketInfo");
-			if (f.exists()) {
-				FileInputStream fin = new FileInputStream(f);
-				ObjectInputStream oon = new ObjectInputStream(fin);
-				@SuppressWarnings("unchecked")
-				HashMap md = (HashMap) oon.readObject();
-				oon.close();
-				long sz = 0;
-				long cl = 0;
-				if (md.containsKey("currentlength")) {
-					sz = Long.parseLong(md.get("currentlength"));
-					if (sz < 0)
-						sz = 0;
-				}
-				if (md.containsKey("compressedlength")) {
-					cl = Long.parseLong(md.get("compressedlength"));
-					if (cl < 0)
-						cl = 0;
+		for (int i = 0; i < 2; i++) {
+			try {
+				FileInputStream fin = null;
+				ObjectInputStream oon = null;
+				File f = new File(this.container_location, "BucketInfo");
+				if (f.exists()) {
+					fin = new FileInputStream(f);
+					oon = new ObjectInputStream(fin);
+					@SuppressWarnings("unchecked")
+					HashMap md = (HashMap) oon.readObject();
+					oon.close();
+					long sz = 0;
+					long cl = 0;
+					if (md.containsKey("currentlength")) {
+						sz = Long.parseLong(md.get("currentlength"));
+						if (sz < 0)
+							sz = 0;
+					}
+					if (md.containsKey("compressedlength")) {
+						cl = Long.parseLong(md.get("compressedlength"));
+						if (cl < 0)
+							cl = 0;
+					}
+					HashBlobArchive.setLength(sz);
+					HashBlobArchive.setCompressedLength(cl);
 				}
-				HashBlobArchive.setLength(sz);
-				HashBlobArchive.setCompressedLength(cl);
+				this.compress = Main.compress;
+				this.encrypt = Main.chunkStoreEncryptionEnabled;
+				break;
+			} catch (EOFException e) {
+				File f = new File(this.container_location, "BucketInfo");
+				File nf = new File(this.container_location, "BucketInfo." + System.currentTimeMillis());
+				SDFSLogger.getLog().warn("BucketInfo is corrupt at " + f.getPath() + " renaming to " + nf.toPath());
+				f.renameTo(nf);
+			} catch (Exception e) {
+				throw new IOException(e);
+			} finally {
+				// if (pool != null)
+				// pool.returnObject(container);
 			}
-			this.compress = Main.compress;
-			this.encrypt = Main.chunkStoreEncryptionEnabled;
-		} catch (Exception e) {
-			throw new IOException(e);
-		} finally {
-			// if (pool != null)
-			// pool.returnObject(container);
 		}
 		Thread thread = new Thread(this);
 		thread.start();
@@ -740,4 +751,13 @@ public long getAllObjSummary(String pp, long id) throws IOException {
 		// TODO Auto-generated method stub
 		return 0;
 	}
+
+	@Override
+	public boolean get_move_blob() {
+		return false;
+	}
+
+	@Override
+	public void set_move_blob(boolean status) {
+	}
 }
diff --git a/src/org/opendedup/sdfs/filestore/ChunkData.java b/src/org/opendedup/sdfs/filestore/ChunkData.java
index 1600098e6..f9e9a81aa 100644
--- a/src/org/opendedup/sdfs/filestore/ChunkData.java
+++ b/src/org/opendedup/sdfs/filestore/ChunkData.java
@@ -4,11 +4,14 @@
 import java.nio.ByteBuffer;
 
 import org.opendedup.collections.DataArchivedException;
+import org.opendedup.collections.InsertRecord;
 import org.opendedup.logging.SDFSLogger;
 import org.opendedup.sdfs.Main;
 import org.opendedup.sdfs.servers.HCServiceProxy;
 import org.opendedup.util.StringUtils;
 
+import com.google.common.primitives.Longs;
+
 /**
  * 
  * @author sam silverberg Chunk block meta data is as follows: [mark of deletion
@@ -108,17 +111,21 @@ public ByteBuffer getMetaDataBytes() {
 		return buf;
 	}
 
-	public void persistData(boolean clear) throws IOException {
+	public InsertRecord persistData(boolean clear) throws IOException {
 		if (this.chunk != null) {
 			if (writeStore == null)
 				writeStore = HCServiceProxy.getChunkStore();
 			if (this.mDelete) {
 				chunk = new byte[cLen];
 			}
-			this.cPos = writeStore.writeChunk(hash, chunk, cLen,this.uuid);
+			InsertRecord rec = writeStore.writeChunk(hash, chunk, cLen,this.uuid);
+			this.cPos = Longs.fromByteArray(rec.getHashLocs());
+			
 			if (clear)
 				this.chunk = null;
+			return rec;
 		}
+		return new InsertRecord(0, cPos);
 	}
 
 	public boolean ismDelete() {
diff --git a/src/org/opendedup/sdfs/filestore/DedupFileStore.java b/src/org/opendedup/sdfs/filestore/DedupFileStore.java
index a8be76777..a91c64661 100644
--- a/src/org/opendedup/sdfs/filestore/DedupFileStore.java
+++ b/src/org/opendedup/sdfs/filestore/DedupFileStore.java
@@ -7,6 +7,8 @@
 import java.util.concurrent.locks.ReentrantLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
+import com.google.common.cache.CacheStats;
+
 import org.opendedup.logging.SDFSLogger;
 import org.opendedup.sdfs.Main;
 import org.opendedup.sdfs.io.DedupFile;
@@ -16,13 +18,13 @@
 import org.opendedup.sdfs.servers.HCServiceProxy;
 
 /**
- * 
+ *
  * @author Sam Silverberg
- * 
+ *
  *         DedupFileStore is a static class used to store, return, and clone
  *         dedup file maps. All dedup files should be accessed through this
  *         class exclusively.
- * 
+ *
  */
 public class DedupFileStore {
 
@@ -34,28 +36,34 @@ public class DedupFileStore {
 	 * maxOpenFiles parameter
 	 */
 	private static ConcurrentHashMap openFile = new ConcurrentHashMap();
-	
+	// private static CleanupThread th = null;
+
 	/*
-	private static LoadingCache keyLookup = CacheBuilder.newBuilder()
-			.maximumSize(100).concurrencyLevel(64)
-			.removalListener(new RemovalListener() {
-				public void onRemoval(RemovalNotification removal) {
-					ByteLongArrayWrapper bk = removal.getKey();
-					try {
-						if(!HCServiceProxy.claimKey(bk.getData(), bk.getVal(),removal.getValue().get())) {
-							SDFSLogger.getLog().debug("Unable to insert " +" hash=" + StringUtils.getHexString(bk.getData()) + " lh=" + bk.getVal());
-						}
-					} catch (Exception e) {
-						SDFSLogger.getLog().error("unable to add reference",e);
-					}
-					
-				}
-			}).build(new CacheLoader() {
-				public AtomicLong load(ByteLongArrayWrapper key) throws KeyNotFoundException {
-					return new AtomicLong(0);
-				}
-			});
-*/
+	 * private static LoadingCache keyLookup =
+	 * CacheBuilder.newBuilder()
+	 * .maximumSize(100).concurrencyLevel(64)
+	 * .removalListener(new RemovalListener() {
+	 * public void onRemoval(RemovalNotification
+	 * removal) {
+	 * ByteLongArrayWrapper bk = removal.getKey();
+	 * try {
+	 * if(!HCServiceProxy.claimKey(bk.getData(),
+	 * bk.getVal(),removal.getValue().get())) {
+	 * SDFSLogger.getLog().debug("Unable to insert " +" hash=" +
+	 * StringUtils.getHexString(bk.getData()) + " lh=" + bk.getVal());
+	 * }
+	 * } catch (Exception e) {
+	 * SDFSLogger.getLog().error("unable to add reference",e);
+	 * }
+	 *
+	 * }
+	 * }).build(new CacheLoader() {
+	 * public AtomicLong load(ByteLongArrayWrapper key) throws KeyNotFoundException
+	 * {
+	 * return new AtomicLong(0);
+	 * }
+	 * });
+	 */
 	/*
 	 * Spawns to open file monitor. The openFile monitor is used to evict open
 	 * files from the openFile hashmap.
@@ -63,40 +71,46 @@ public AtomicLong load(ByteLongArrayWrapper key) throws KeyNotFoundException {
 	static {
 		if (Main.maxInactiveFileTime > 0 && !Main.blockDev) {
 			openFileMonitor = new OpenFileMonitor(10000, Main.maxInactiveFileTime);
-		} 
+		}
+		/*
+		 * if (Main.CLEANUP_THREAD_INTERVAL > 0 && Main.chunkStoreEncryptionEnabled) {
+		 * th = new CleanupThread();
+		 * }
+		 */
 
 	}
 
 	public static void init() {
 
 	}
-	
-	//private static boolean gcRunning;
+
+	// private static boolean gcRunning;
 	static ReentrantReadWriteLock gcLock = new ReentrantReadWriteLock();
+
 	public static void gcRunning(boolean running) {
 		/*
-		gcLock.writeLock().lock();
-		try{
-			
-		if(running) {
-			gcRunning = true;
-			keyLookup.invalidateAll();
-		}
-		
-		else
-			gcRunning = false;
-		}finally {
-			gcLock.writeLock().unlock();
-		}
-		*/
-		
+		 * gcLock.writeLock().lock();
+		 * try{
+		 *
+		 * if(running) {
+		 * gcRunning = true;
+		 * keyLookup.invalidateAll();
+		 * }
+		 *
+		 * else
+		 * gcRunning = false;
+		 * }finally {
+		 * gcLock.writeLock().unlock();
+		 * }
+		 */
+
 	}
 
 	/**
-	 * 
+	 *
 	 * @param mf
-	 *            the metadata dedup file to get the DedupFile for. If no dedup
-	 *            file map exists, one is created.
+	 *           the metadata dedup file to get the DedupFile for. If no dedup
+	 *           file map exists, one is created.
 	 * @return the dedup file map associated with the MetaDataDedupFile
 	 * @throws IOException
 	 */
@@ -113,28 +127,29 @@ public static void updateDedupFile(MetaDataDedupFile mf) {
 		}
 	}
 
-	public static long addRef(byte[] entry, long val,int ct) throws IOException {
+	public static long addRef(byte[] entry, long val, int ct) throws IOException {
 		if (val == 1 || val == 0)
 			return 1;
-		
+
 		try {
-			if(!Main.refCount || Arrays.equals(entry, WritableCacheBuffer.bk))
+			if (!Main.refCount || Arrays.equals(entry, WritableCacheBuffer.bk))
 				return 1;
 			else {
 				gcLock.readLock().lock();
 				try {
-				//if(gcRunning)
-					return HCServiceProxy.claimKey(entry, val,ct);
-				/*
-				ByteLongArrayWrapper bl = new ByteLongArrayWrapper(entry,val);
-				try {
-					keyLookup.get(bl).incrementAndGet();
-					return true;
-				} catch (ExecutionException e) {
-					SDFSLogger.getLog().error("unable to increment", e);;
-					return false;
-				}*/
-				}finally {
+					// if(gcRunning)
+					return HCServiceProxy.claimKey(entry, val, ct);
+					/*
+					 * ByteLongArrayWrapper bl = new ByteLongArrayWrapper(entry,val);
+					 * try {
+					 * keyLookup.get(bl).incrementAndGet();
+					 * return true;
+					 * } catch (ExecutionException e) {
+					 * SDFSLogger.getLog().error("unable to increment", e);;
+					 * return false;
+					 * }
+					 */
+				} finally {
 					gcLock.readLock().unlock();
 				}
 			}
@@ -142,28 +157,28 @@ public static long addRef(byte[] entry, long val,int ct) throws IOException {
 		} finally {
 		}
 	}
-	
-	public static long removeRef(byte[] entry, long val,int ct) throws IOException {
-		if (val == 1|| val == 0)
+
+	public static long removeRef(byte[] entry, long val, int ct) throws IOException {
+		if (val == 1 || val == 0)
 			return 1;
-		
+
 		try {
-			if(!Main.refCount || Arrays.equals(entry, WritableCacheBuffer.bk))
+			if (!Main.refCount || Arrays.equals(entry, WritableCacheBuffer.bk))
 				return 1;
 			else {
 				gcLock.readLock().lock();
 				try {
-				//if(gcRunning)
-					return HCServiceProxy.claimKey(entry, val,-1*ct);
-				//ByteLongArrayWrapper bl = new ByteLongArrayWrapper(entry,val);
-				//try {
-					//keyLookup.get(bl).decrementAndGet();
-					//return true;
-				//} catch (ExecutionException e) {
-					//SDFSLogger.getLog().error("unable to increment", e);;
-					//return false;
-				//}
-				}finally {
+					// if(gcRunning)
+					return HCServiceProxy.claimKey(entry, val, -1 * ct);
+					// ByteLongArrayWrapper bl = new ByteLongArrayWrapper(entry,val);
+					// try {
+					// keyLookup.get(bl).decrementAndGet();
+					// return true;
+					// } catch (ExecutionException e) {
+					// SDFSLogger.getLog().error("unable to increment", e);;
+					// return false;
+					// }
+				} finally {
 					gcLock.readLock().unlock();
 				}
 			}
@@ -172,8 +187,6 @@ public static long removeRef(byte[] entry, long val,int ct) throws IOException {
 		}
 	}
 
-	
-
 	public static DedupFile getDedupFile(MetaDataDedupFile mf) throws IOException {
 		getDFLock.lock();
 		SparseDedupFile df = null;
@@ -213,42 +226,44 @@ public static DedupFile openDedupFile(MetaDataDedupFile mf) throws IOException {
 
 	/**
 	 * Adds a dedup file to the openFile hashmap.
-	 * 
+	 *
 	 * @param df
-	 *            the dedup file to add to the openfile hashmap
+	 *           the dedup file to add to the openfile hashmap
 	 * @throws IOException
 	 */
 	public static void addOpenDedupFiles(SparseDedupFile df) throws IOException {
 		if (!closing) {
-			if (SDFSLogger.isDebug())
-				SDFSLogger.getLog().debug("adding dedupfile " + df.getMetaFile().getPath());
-			//SDFSLogger.getLog().info("adding " + df.getGUID() + "pth=" + df.getMetaFile().getPath());
+
+			SDFSLogger.getLog().debug("adding dedupfile " + df.getMetaFile().getPath());
+			// SDFSLogger.getLog().info("adding " + df.getGUID() + "pth=" +
+			// df.getMetaFile().getPath());
 			if (openFile.size() >= Main.maxOpenFiles) {
 				SDFSLogger.getLog().warn("open files reached " + openFile.size());
-				for(Entry en : openFile.entrySet()) {
-					SDFSLogger.getLog().warn("path=" + en.getValue().mf.getPath() + " guid="+en.getKey());
+				for (Entry en : openFile.entrySet()) {
+					SDFSLogger.getLog().warn("path=" + en.getValue().mf.getPath() + " guid=" + en.getKey());
 				}
 				throw new IOException(
 						"maximum number of files reached [" + Main.maxOpenFiles + "]. Too many open files");
 			}
 			openFile.put(df.getGUID(), df);
-			if (SDFSLogger.isDebug())
-				SDFSLogger.getLog().debug("dedupfile cache size is " + openFile.size());
+
+			SDFSLogger.getLog().debug("dedupfile cache size is " + openFile.size());
 		} else {
 			throw new IOException("DedupFileStore is closed");
 		}
 	}
+
 	public static SparseDedupFile get(String guid) {
 		return openFile.get(guid);
 	}
 
 	/**
 	 * Clones a dedupFile
-	 * 
+	 *
 	 * @param oldmf
-	 *            the file to clone
+	 *              the file to clone
 	 * @param newmf
-	 *            the location of the, new, cloned dedup file map.
+	 *              the location of the, new, cloned dedup file map.
 	 * @return the new cloned Dedup file map
 	 * @throws IOException
 	 */
@@ -275,22 +290,22 @@ public static DedupFile cloneDedupFile(MetaDataDedupFile oldmf, MetaDataDedupFil
 
 	/**
 	 * removes an open dedup file map from the openFile hashmap.
-	 * 
+	 *
 	 * @param mf
 	 */
 	public static void removeOpenDedupFile(String guid) {
-		//SDFSLogger.getLog().info("removing " + guid);
-		if(guid != null) {
+		// SDFSLogger.getLog().info("removing " + guid);
+		if (guid != null) {
 			openFile.remove(guid);
 		}
-		
+
 	}
 
 	/**
 	 * Checks if a file is open
-	 * 
+	 *
 	 * @param mf
-	 *            the meta file to check if its open.
+	 *           the meta file to check if its open.
 	 * @return true if open
 	 */
 	public static boolean fileOpen(MetaDataDedupFile mf) {
@@ -302,7 +317,7 @@ public static boolean fileOpen(MetaDataDedupFile mf) {
 	}
 
 	/**
-	 * 
+	 *
 	 * @return the open files at an array.
 	 */
 	public static DedupFile[] getArray() {
@@ -316,8 +331,13 @@ public static DedupFile[] getArray() {
 	 */
 	public static void close() {
 		closing = true;
-		if (SDFSLogger.isDebug())
-			SDFSLogger.getLog().debug("Open Files = " + openFile.size());
+
+		SDFSLogger.getLog().debug("Open Files = " + openFile.size());
+		/*
+		 * if (th != null) {
+		 * th.close();
+		 * }
+		 */
 		if (openFileMonitor != null)
 			openFileMonitor.close();
 		if (openFile.size() > 0) {
@@ -329,19 +349,19 @@ public static void close() {
 					try {
 						df.forceClose();
 					} catch (IOException e) {
-						if (SDFSLogger.isDebug())
-							SDFSLogger.getLog().debug("unable to Close " + df.getMetaFile().getPath(), e);
+
+						SDFSLogger.getLog().debug("unable to Close " + df.getMetaFile().getPath(), e);
 					}
-					if (SDFSLogger.isDebug())
-						SDFSLogger.getLog().debug("Closed " + df.getMetaFile().getPath());
+
+					SDFSLogger.getLog().debug("Closed " + df.getMetaFile().getPath());
 				}
 			}
-		} 
-		/*
-		if(Main.refCount) {
-			keyLookup.invalidateAll();
 		}
-		*/
+		/*
+		 * if(Main.refCount) {
+		 * keyLookup.invalidateAll();
+		 * }
+		 */
 
 	}
 
@@ -349,8 +369,8 @@ public static void close() {
 	 * Flushes the write buffers for all open files.
 	 */
 	public static void flushAllFiles() {
-		if (SDFSLogger.isDebug())
-			SDFSLogger.getLog().debug("flushing write caches of size " + openFile.size());
+
+		SDFSLogger.getLog().debug("flushing write caches of size " + openFile.size());
 		Object[] dfs = getArray();
 		for (int i = 0; i < dfs.length; i++) {
 			DedupFile df = (DedupFile) dfs[i];
@@ -360,12 +380,62 @@ public static void flushAllFiles() {
 				SDFSLogger.getLog().warn("DSE Full", e);
 			}
 		}
-		if (SDFSLogger.isDebug())
-			SDFSLogger.getLog().debug("write caches flushed");
+
+		SDFSLogger.getLog().debug("write caches flushed");
 		/*
-		if(Main.refCount) {
-			keyLookup.invalidateAll();
+		 * if(Main.refCount) {
+		 * keyLookup.invalidateAll();
+		 * }
+		 */
+	}
+
+	private static class CleanupThread implements Runnable {
+
+		boolean closed = true;
+		final Thread th;
+
+		public CleanupThread() {
+			closed = false;
+			th = new Thread(this);
+			th.start();
 		}
-		*/
+
+		@Override
+		public void run() {
+			while (!closed) {
+				try {
+					Thread.sleep(Main.CLEANUP_THREAD_INTERVAL);
+					DedupFile[] df = DedupFileStore.getArray();
+					for (DedupFile dd : df) {
+						SparseDedupFile sd = (SparseDedupFile) dd;
+						try {
+							sd.CacheCleanup();
+							if (Main.PRINT_CACHESTATS) {
+								CacheStats st = sd.getCacheStats();
+								String msg = String.format("cache stats for [%s] avg-load-penalty=%f hit-rate=%f " +
+										"load-exception-rate=%f load-count=%d miss-rate=%f",
+										sd.mf.getPath(), st.averageLoadPenalty(), st.hitRate(), st.loadExceptionRate(),
+										st.loadCount(), st.missRate());
+								SDFSLogger.getLog().info(msg);
+							}
+						} catch (Exception e) {
+							SDFSLogger.getLog().warn("Unable to get stats from sparsededupfile", e);
+						}
+					}
+				} catch (InterruptedException e) {
+					this.closed = true;
+					break;
+				}
+
+			}
+
+		}
+
+		public void close() {
+			closed = true;
+			th.interrupt();
+
+		}
+
 	}
 }
diff --git a/src/org/opendedup/sdfs/filestore/HashBlobArchive.java b/src/org/opendedup/sdfs/filestore/HashBlobArchive.java
index 7f9562f24..5c81c449c 100644
--- a/src/org/opendedup/sdfs/filestore/HashBlobArchive.java
+++ b/src/org/opendedup/sdfs/filestore/HashBlobArchive.java
@@ -45,6 +45,7 @@
 import org.apache.commons.io.FileUtils;
 import org.opendedup.collections.DataArchivedException;
 import org.opendedup.collections.HashExistsException;
+import org.opendedup.collections.InsertRecord;
 import org.opendedup.collections.MapClosedException;
 import org.opendedup.collections.SimpleByteArrayLongMap;
 import org.opendedup.collections.SimpleByteArrayLongMap.KeyValuePair;
@@ -63,6 +64,7 @@
 
 import com.google.common.cache.CacheBuilder;
 import com.google.common.cache.CacheLoader;
+import com.google.common.cache.CacheStats;
 import com.google.common.cache.LoadingCache;
 import com.google.common.cache.RemovalListener;
 import com.google.common.cache.RemovalNotification;
@@ -74,7 +76,7 @@
 
 public class HashBlobArchive implements Runnable, Serializable {
 	/**
-	 * 
+	 *
 	 */
 	private static final long serialVersionUID = 1L;
 	private long id;
@@ -136,6 +138,9 @@ public class HashBlobArchive implements Runnable, Serializable {
 	public static int maxQueueSize = 0;
 	public AtomicInteger uncompressedLength = new AtomicInteger(0);
 	public static AbstractHashEngine eng = HashFunctionPool.getHashEngine();
+	private int firstCLLent = 0;
+	private static ReentrantLock flock = new ReentrantLock();
+	private static ConcurrentHashMap> flushingArchives = new ConcurrentHashMap>();
 
 	public static void registerEventBus(Object obj) {
 		eventUploadBus.register(obj);
@@ -150,7 +155,6 @@ public static void setLocalCacheSize(long sz) {
 		} finally {
 			// slock.unlock();
 		}
-
 	}
 
 	public static long getLocalCacheSize() {
@@ -720,7 +724,7 @@ public static synchronized void setCacheSize(long sz, boolean update) throws IOE
 		}
 	}
 
-	public static long writeBlock(byte[] hash, byte[] chunk, String uuid)
+	public static InsertRecord writeBlock(byte[] hash, byte[] chunk, String uuid)
 			throws IOException, ArchiveFullException, ReadOnlyArchiveException {
 
 		Lock l = slock.readLock();
@@ -736,8 +740,8 @@ public static long writeBlock(byte[] hash, byte[] chunk, String uuid)
 			for (;;) {
 				try {
 					HashBlobArchive ar = writableArchives.get(uuid);
-					ar.putChunk(hash, chunk);
-					return ar.id;
+					int cl = ar.putChunk(hash, chunk);
+					return new InsertRecord(cl, ar.id);
 				} catch (HashExistsException e) {
 					throw e;
 				} catch (ArchiveFullException | NullPointerException | ReadOnlyArchiveException e) {
@@ -748,14 +752,16 @@ public static long writeBlock(byte[] hash, byte[] chunk, String uuid)
 					l.lock();
 					try {
 						HashBlobArchive ar = writableArchives.get(uuid);
+						int cl = 0;
 						if (ar != null && ar.writeable)
-							ar.putChunk(hash, chunk);
+							cl = ar.putChunk(hash, chunk);
 						else {
 							ar = new HashBlobArchive(hash, chunk);
 							ar.uuid = uuid;
 							writableArchives.put(uuid, ar);
+							cl = ar.firstCLLent;
 						}
-						return ar.id;
+						return new InsertRecord(cl, ar.id);
 					} catch (HashExistsException e1) {
 						l.unlock();
 						l = null;
@@ -793,6 +799,10 @@ public static long writeBlock(byte[] hash, byte[] chunk, String uuid)
 
 	private boolean reloading = false;
 
+	public static CacheStats getCacheStats() {
+		return archives.stats();
+	}
+
 	private static void buildCache() throws IOException {
 		long mscsz = LOCAL_CACHE_SIZE / MAX_LEN;
 		SDFSLogger.getLog().info("Maximum Cache Size is [" + mscsz + "]");
@@ -991,8 +1001,8 @@ private HashBlobArchive(boolean compact, int sz, int bsz) throws IOException {
 			pid = store.getNewArchiveID();
 		}
 		this.id = pid;
-		if (SDFSLogger.isDebug())
-			SDFSLogger.getLog().debug("waiting to write " + id + " rchunks sz=" + rchunks.size());
+
+		SDFSLogger.getLog().debug("waiting to write " + id + " rchunks sz=" + rchunks.size());
 		this.writeable = true;
 		this.compactStaged = compact;
 		f = new File(staged_chunk_location, Long.toString(id));
@@ -1028,7 +1038,6 @@ private HashBlobArchive(boolean compact, int sz, int bsz) throws IOException {
 			}
 
 		}
-
 	}
 
 	private HashBlobArchive(byte[] hash, byte[] chunk)
@@ -1061,8 +1070,8 @@ private HashBlobArchive(byte[] hash, byte[] chunk)
 				wOpenFiles.put(id, ch);
 
 				rchunks.put(this.id, this);
-				if (SDFSLogger.isDebug())
-					SDFSLogger.getLog().debug("waiting to write " + id + " rchunks sz=" + rchunks.size());
+
+				SDFSLogger.getLog().debug("waiting to write " + id + " rchunks sz=" + rchunks.size());
 				if (wMaps.containsKey(id)) {
 					SDFSLogger.getLog().warn("Key already Exists [" + id + "]");
 				} else {
@@ -1087,7 +1096,7 @@ private HashBlobArchive(byte[] hash, byte[] chunk)
 					}
 					this.ivspec = new IvParameterSpec(biv);
 				}
-				this.putChunk(hash, chunk);
+				this.firstCLLent = this.putChunk(hash, chunk);
 				executor.execute(this);
 				break;
 			} catch (ArchiveFullException | ReadOnlyArchiveException e) {
@@ -1187,8 +1196,8 @@ private HashBlobArchive(Long id) throws Exception {
 		f = getPath(id);
 		if (cacheReads || VERSION == 0)
 			this.loadData();
-		if (SDFSLogger.isDebug())
-			SDFSLogger.getLog().debug("Hit Rate = " + archives.stats().hitRate());
+
+		SDFSLogger.getLog().debug("Hit Rate = " + archives.stats().hitRate());
 		if (VERSION > 0 && cacheReads) {
 			RandomAccessFile zraf = new RandomAccessFile(f, "rw");
 			FileChannel zfc = zraf.getChannel();
@@ -1238,8 +1247,8 @@ private HashBlobArchive(File f, Long id) throws IOException {
 			this.ivspec = new IvParameterSpec(b);
 
 		}
-		if (SDFSLogger.isDebug())
-			SDFSLogger.getLog().debug("Hit Rate = " + archives.stats().hitRate());
+
+		SDFSLogger.getLog().debug("Hit Rate = " + archives.stats().hitRate());
 	}
 
 	public long getID() {
@@ -1255,7 +1264,7 @@ private long getFSize() {
 
 	AtomicLong np = new AtomicLong(offset);
 
-	private void putChunk(byte[] hash, byte[] chunk)
+	private int putChunk(byte[] hash, byte[] chunk)
 			throws IOException, ArchiveFullException, ReadOnlyArchiveException {
 
 		if (VERIFY_WRITES) {
@@ -1345,12 +1354,14 @@ private void putChunk(byte[] hash, byte[] chunk)
 								this.writeable = false;
 								throw new ArchiveFullException("archive full");
 							}
+
 							// SDFSLogger.getLog().info("put " + zd + " len " +
 							// chunk.length + " into " +this.id);
 						}
 						if (!ins) {
 							throw new HashExistsException(this.id, hash);
 						}
+
 					} catch (ArchiveFullException e1) {
 						np.set(cp);
 						this.writeable = false;
@@ -1395,11 +1406,13 @@ private void putChunk(byte[] hash, byte[] chunk)
 
 				// SDFSLogger.getLog().info("writing at " +f.length() + " bl=" +
 				// buf.remaining() + "cs=" +chunk.length );
+
 				try {
 					ch.write(buf, cp);
 				} catch (Exception e) {
 					throw new IOException(e);
 				}
+				return chunk.length;
 			} finally {
 				ul.unlock();
 			}
@@ -2188,7 +2201,6 @@ public long compact() throws IOException {
 		return f.length() - ofl;
 	}
 
-	// Random nd = new Random();
 	private boolean uploadFile(long nid) throws Exception {
 		Lock l = this.lock.readLock();
 		l.lock();
@@ -2315,6 +2327,7 @@ private boolean upload(long nid) {
 			this.writeable = false;
 			if (this.uuid != null)
 				writableArchives.remove(this.uuid);
+
 		} finally {
 			l.unlock();
 		}
@@ -2325,14 +2338,14 @@ private boolean upload(long nid) {
 			if (this.uploaded) {
 				return true;
 			}
+
 			if (f.exists() && (f.length() - offset) > 0) {
-				if (SDFSLogger.isDebug())
-					SDFSLogger.getLog().debug("writing " + id);
+
+				SDFSLogger.getLog().debug("writing " + id);
 				if (!this.uploadFile(nid)) {
 					return false;
 				}
-				if (SDFSLogger.isDebug())
-					SDFSLogger.getLog().debug("wrote " + id);
+				SDFSLogger.getLog().debug("wrote " + id);
 
 			} else if (f.exists() && !this.cached) {
 				this.delete();
@@ -2364,7 +2377,10 @@ private boolean upload(long nid) {
 				new File(getStagedPath(this.id), Long.toString(this.id) + ".map").delete();
 			}
 			this.uploaded = true;
-		} catch (Exception e) {
+
+		} catch (
+
+		Exception e) {
 			SDFSLogger.getLog().error("error while writing " + this.id, e);
 			return false;
 		} finally {
@@ -2396,6 +2412,7 @@ public void run() {
 			} else {
 				SDFSLogger.getLog().debug("Not waiting writable=" + this.writeable);
 			}
+
 		} catch (Exception e) {
 			SDFSLogger.getLog().error("error while writing " + this.id, e);
 		}
@@ -2406,15 +2423,43 @@ public void run() {
 			SDFSLogger.getLog().debug(dur + " len=" + f.length());
 			if (this.compactStaged)
 				return;
-			while (!this.upload(this.id)) {
+			if (this.uuid != null) {
+				flock.lock();
 				try {
-					SDFSLogger.getLog().warn("Will Retry Upload of " + this.id + " in " + (30000 / 1000) + "seconds");
-					Thread.sleep(30000);
+					if (!flushingArchives.contains(this.uuid)) {
+						flushingArchives.put(this.uuid, new ConcurrentHashMap());
+					}
+					flushingArchives.get(this.uuid).put(this.id, this);
+				} finally {
+					flock.unlock();
+				}
+			}
+			try {
+				while (!this.upload(this.id)) {
+					try {
+						SDFSLogger.getLog()
+								.warn("Will Retry Upload of " + this.id + " in " + (30000 / 1000) + "seconds");
+						Thread.sleep(30000);
 
-				} catch (InterruptedException e) {
+					} catch (InterruptedException e) {
 
+					}
+					SDFSLogger.getLog().warn("Unable to upload " + this.id);
+				}
+			} finally {
+				if (this.uuid != null) {
+					flock.lock();
+					try {
+						if (flushingArchives.contains(this.uuid)) {
+							flushingArchives.get(this.uuid).remove(this.id);
+							if (flushingArchives.get(this.uuid).size() == 0) {
+								flushingArchives.remove(this.uuid);
+							}
+						}
+					} finally {
+						flock.unlock();
+					}
 				}
-				SDFSLogger.getLog().warn("Unable to upload " + this.id);
 			}
 			for (;;) {
 				try {
@@ -2462,9 +2507,48 @@ public static void sync(String uuid) {
 
 			HashBlobArchive ar = writableArchives.get(uuid);
 			if (ar != null) {
+				SDFSLogger.getLog().debug("archive for " + uuid + " found");
 				synchronized (ar.LOCK) {
 					ar.LOCK.notify();
 				}
+			} else {
+				SDFSLogger.getLog().debug("archive for " + uuid + " not found");
+			}
+			int z = 0;
+			for (int i = 0; i < 6000; i++) {
+				if (!flushingArchives.containsKey(uuid)) {
+					break;
+				} else {
+					flock.lock();
+					try {
+						boolean nr=false;
+						if (flushingArchives.contains(uuid)) {
+							for (HashBlobArchive ark : flushingArchives.get(uuid).values()) {
+								if(!ark.uploaded) {
+									nr = true;
+								}
+							}
+							
+						}
+						if(!nr) {
+							flushingArchives.remove(uuid);
+							break;
+						}
+					} finally {
+						flock.unlock();
+					}
+					z++;
+					if (z == 120) {
+						SDFSLogger.getLog().warn("Flushing " + uuid + " is slow taking " + i + " seconds flushing size "
+								+ flushingArchives.get(uuid).size() + ".");
+						z = 0;
+					}
+					try {
+						Thread.sleep(1000);
+					} catch (Exception e) {
+
+					}
+				}
 			}
 		}
 	}
@@ -2572,7 +2656,7 @@ public BlockPolicy() {
 		/**
 		 * Puts the Runnable to the blocking queue, effectively blocking the delegating
 		 * thread until space is available.
-		 * 
+		 *
 		 * @param r the runnable task requested to be executed
 		 * @param e the executor attempting to execute this task
 		 */
diff --git a/src/org/opendedup/sdfs/filestore/HashStore.java b/src/org/opendedup/sdfs/filestore/HashStore.java
index 170b1e0b8..d2df2d581 100644
--- a/src/org/opendedup/sdfs/filestore/HashStore.java
+++ b/src/org/opendedup/sdfs/filestore/HashStore.java
@@ -2,8 +2,10 @@
 
 import java.io.File;
 
-
 import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.LinkOption;
+import java.nio.file.Paths;
 import java.util.Arrays;
 
 import org.opendedup.collections.AbstractHashesMap;
@@ -16,12 +18,13 @@
 import org.opendedup.sdfs.notification.SDFSEvent;
 import org.opendedup.sdfs.servers.HCServiceProxy;
 import org.opendedup.sdfs.servers.HashChunkServiceInterface;
+import org.opendedup.util.OSValidator;
 import org.opendedup.util.StringUtils;
 
 /**
- * 
+ *
  * @author Sam Silverberg
- * 
+ *
  *         The TCHashStore stores data locations within the ChunkStore service.
  *         Dedupe data is stored within a chunkstore but it is referenced within
  *         the TCHashStore for lookup and retrieval. Meta-data associated with
@@ -29,12 +32,12 @@
  *         TokyoCabinet library. Data is indexed by the hash and is stored as a
  *         serialized PersistantDedupChunk. The TCHashStore is located on disk
  *         based on @see com.annesam.sdfs.Main#hashDBStore.
- * 
+ *
  *         ChuckStore Service communication flows as follows:
- * 
+ *
  *         sdfs client <-TCP-> ClientThread <-> HashChunkService <->TCHashStore
  *         <->AbstractChunkStore
- * 
+ *
  */
 public class HashStore {
 
@@ -70,16 +73,19 @@ public class HashStore {
 
 	/**
 	 * Instantiates the TC hash store.
-	 * 
+	 *
 	 * @param name
-	 *            the name of the hash store.
+	 *             the name of the hash store.
 	 * @throws IOException
+	 * @throws InterruptedException
 	 */
-	public HashStore(HashChunkServiceInterface hcs) throws IOException {
+	public HashStore(HashChunkServiceInterface hcs) throws IOException, InterruptedException {
 		this.name = "sdfs";
 		this.hcs = hcs;
 		try {
 			this.connectDB();
+		} catch (InterruptedException e) {
+			throw new InterruptedException(e.getMessage());
 		} catch (Exception e) {
 			e.printStackTrace();
 		}
@@ -91,9 +97,9 @@ public HashStore(HashChunkServiceInterface hcs) throws IOException {
 	}
 
 	/**
-	 * 
+	 *
 	 * @return the total number of entries stored in this database
-	 * 
+	 *
 	 */
 	public long getEntries() {
 		return bdb.getSize();
@@ -103,19 +109,19 @@ public long getMaxEntries() {
 		return this.bdb.getMaxSize();
 	}
 
-	public void setMaxSize(long sz) throws IOException  {
+	public void setMaxSize(long sz) throws IOException {
 		this.bdb.setMaxSize(sz);
 	}
-	
-	public boolean mightContainKey(byte [] key,long id) {
-		return this.bdb.mightContainKey(key,id);
+
+	public boolean mightContainKey(byte[] key, long id) {
+		return this.bdb.mightContainKey(key, id);
 	}
 
 	/**
 	 * Initiates the chunkstore. It will create a S3 chunk store per HashStore
 	 * if AWS is enabled. Otherwise it will use the default ChunkStore @see
 	 * FileChunkStore.
-	 * 
+	 *
 	 * @throws IOException
 	 */
 	/*
@@ -126,7 +132,7 @@ public boolean mightContainKey(byte [] key,long id) {
 
 	/**
 	 * returns the name of the TCHashStoreentrie
-	 * 
+	 *
 	 * @return the name of the hash store
 	 */
 	public String getName() {
@@ -135,9 +141,9 @@ public String getName() {
 
 	/**
 	 * method used to determine if the hash already exists in the database
-	 * 
+	 *
 	 * @param hash
-	 *            the md5 or sha hash to lookup
+	 *             the md5 or sha hash to lookup
 	 * @return returns true if the hash already exists.
 	 * @throws IOException
 	 */
@@ -145,8 +151,8 @@ public long hashExists(byte[] hash) throws IOException {
 		return this.bdb.get(hash);
 	}
 
-	public String restoreBlock(byte[] hash,long id) throws IOException {
-		//long id = this.bdb.get(hash);
+	public String restoreBlock(byte[] hash, long id) throws IOException {
+		// long id = this.bdb.get(hash);
 		return HCServiceProxy.getChunkStore().restoreBlock(id, hash);
 	}
 
@@ -156,92 +162,112 @@ public boolean blockRestored(String id) throws IOException {
 
 	/**
 	 * The method used to open and connect to the database.
-	 * 
+	 *
 	 * @throws IOException
 	 * @throws HashtableFullException
 	 */
-	private void connectDB() throws IOException, HashtableFullException {
+	private void connectDB() throws IOException, HashtableFullException, InterruptedException {
 		File directory = new File(Main.hashDBStore + File.separator);
 		if (!directory.exists())
 			directory.mkdirs();
+		if (OSValidator.isWindows()) {
+			Files.setAttribute(Paths.get(directory.getParentFile().getParentFile().getPath()), "dos:hidden", true,
+					LinkOption.NOFOLLOW_LINKS);
+		}
 		File dbf = new File(directory.getPath() + File.separator + "hashstore-"
 				+ this.getName());
 		long entries = ((Main.chunkStoreAllocationSize / Main.chunkStorePageSize)) + 8000;
 		if (HashFunctionPool.max_hash_cluster > 1) {
-			entries = (Main.chunkStoreAllocationSize / HashFunctionPool.avg_page_size) + 8000;
+			entries = (Main.chunkStoreAllocationSize / HashFunctionPool.minLen) + 8000;
 		}
 		try {
 			SDFSLogger.getLog().info(
 					"Loading hashdb class " + Main.hashesDBClass);
 			SDFSLogger.getLog().info("Maximum Number of Entries is " + entries);
-			if(Main.hashesDBClass.equals("org.opendedup.collections.ShardedProgressiveFileBasedCSMap2")) {
+			if (Main.hashesDBClass.equals("org.opendedup.collections.ShardedProgressiveFileBasedCSMap2")) {
 				SDFSLogger.getLog().info("updating hashesdb class to org.opendedup.collections.RocksDBMap");
 				Main.hashesDBClass = "org.opendedup.collections.RocksDBMap";
-			} else if(Main.hashesDBClass.equals("backport")) {
+			} else if (Main.hashesDBClass.equals("backport")) {
 				Main.hashesDBClass = "org.opendedup.collections.ShardedProgressiveFileBasedCSMap2";
 			}
-				
+
 			bdb = (AbstractHashesMap) Class.forName(Main.hashesDBClass)
 					.newInstance();
-			bdb.init(entries, dbf.getPath(),Main.fpp);
+			bdb.init(entries, dbf.getPath(), Main.fpp);
 		} catch (InstantiationException e) {
 			SDFSLogger.getLog().fatal("Unable to initiate ChunkStore", e);
 			e.printStackTrace();
-			System.exit(-1);
+			if (Main.sdfsSyncEnabled) {
+				throw new InterruptedException("Exception occured while syncSDFS is enabled. " + e);
+			} else {
+				System.exit(-1);
+			}
 		} catch (IllegalAccessException e) {
 			SDFSLogger.getLog().fatal("Unable to initiate ChunkStore", e);
 			e.printStackTrace();
-			System.exit(-1);
+			if (Main.sdfsSyncEnabled) {
+				throw new InterruptedException("Exception occured while syncSDFS is enabled. " + e);
+			} else {
+				System.exit(-1);
+			}
 		} catch (ClassNotFoundException e) {
 			SDFSLogger.getLog().fatal("Unable to initiate ChunkStore", e);
 			e.printStackTrace();
-			System.exit(-1);
+			if (Main.sdfsSyncEnabled) {
+				throw new InterruptedException("Exception occured while syncSDFS is enabled. " + e);
+			} else {
+				System.exit(-1);
+			}
 		} catch (IOException e) {
 			SDFSLogger.getLog().fatal("Unable to initiate ChunkStore", e);
-			e.printStackTrace();
-			System.exit(-1);
+			if (Main.sdfsSyncEnabled) {
+				throw new InterruptedException("Exception occured while syncSDFS is enabled. " + e);
+			} else {
+				System.exit(0);
+			}
+
 		}
 
 	}
 
 	/**
 	 * A method to return a chunk from the hash store.
-	 * 
+	 *
 	 * @param hash
-	 *            the md5 or sha hash to store
+	 *             the md5 or sha hash to store
 	 * @return a hashchunk or null if the hash is not in the database.
 	 * @throws DataArchivedException
 	 */
-	public HashChunk getHashChunk(byte[] hash,long pos) throws IOException,
+	public HashChunk getHashChunk(byte[] hash, long pos) throws IOException,
 			DataArchivedException {
 		HashChunk hs = null;
 		// String hStr = StringUtils.getHexString(hash);
 		/*
 		 * hs = this.cacheBuffers.get(hStr); if (hs != null) { return hs; }
-		 * 
-		 * 
+		 *
+		 *
 		 * if (this.readingBuffers.containsKey(hStr)) { int t = 0; while (t <
 		 * Main.chunkStoreDirtyCacheTimeout) { try { Thread.sleep(1); hs =
 		 * this.cacheBuffers.get(hStr); if (hs != null) { return hs; } } catch
 		 * (Exception e) {
-		 * 
+		 *
 		 * } t++; } } else { if(this.readingBuffers.size() < mapSize)
 		 * this.readingBuffers.put(hStr, hs); }
 		 */
-		byte [] data = bdb.getData(hash,pos);
+		byte[] data = bdb.getData(hash, pos);
 		if (data == null && Arrays.equals(hash, blankHash)) {
-			hs = new HashChunk(hash, new byte[blankData.length], false,1,null);
-		} else if(data == null) {
+			hs = new HashChunk(hash, new byte[blankData.length], false, 1, null);
+		} else if (data == null) {
 			SDFSLogger.getLog().warn("data null for [" + StringUtils.getHexString(hash) + "] [" + pos + "]");
 		}
-		hs = new HashChunk(hash, data, false,1,null);
+		hs = new HashChunk(hash, data, false, 1, null);
 		// this.cacheBuffers.put(hStr, hs);
 
 		return hs;
 	}
-	
-	public long claimKey(byte [] key,long val,long ct) throws IOException {
-		return bdb.claimKey(key,val,ct);
+
+	public long claimKey(byte[] key, long val, long ct) throws IOException {
+		return bdb.claimKey(key, val, ct);
 	}
 
 	public void cacheChunk(long pos) throws IOException,
@@ -249,23 +275,23 @@ public void cacheChunk(long pos) throws IOException,
 		bdb.cache(pos);
 	}
 
-	public long processHashClaims(SDFSEvent evt,boolean compact) throws IOException {
-		return this.bdb.claimRecords(evt,compact);
+	public long processHashClaims(SDFSEvent evt, boolean compact) throws IOException {
+		return this.bdb.claimRecords(evt, compact);
 	}
 
 	public void compactDB() throws IOException {
 		this.bdb.commitCompact(true);
 	}
-	
+
 	public void clearRefMap() throws IOException {
 		this.bdb.clearRefMap();
 	}
 
 	/**
 	 * Adds a block of data to the TC hash store and the chunk store.
-	 * 
+	 *
 	 * @param chunk
-	 *            the chunk to persist
+	 *              the chunk to persist
 	 * @return true returns true if the data was written. Data will not be
 	 *         written if the hash already exists in the db.
 	 * @throws IOException
@@ -278,7 +304,7 @@ public InsertRecord addHashChunk(HashChunk chunk) throws IOException,
 			// if (!bdb.containsKey(chunk.getName())) {
 			// long start = chunkStore.reserveWritePosition(chunk.getLen());
 			ChunkData cm = new ChunkData(chunk.getName(),
-					Main.chunkStorePageSize, chunk.getData(),chunk.getUUID());
+					Main.chunkStorePageSize, chunk.getData(), chunk.getUUID());
 			cm.references = chunk.getCT();
 			written = bdb.put(cm);
 			// SDFSLogger.getLog().debug("wrote hash " +
@@ -288,12 +314,14 @@ public InsertRecord addHashChunk(HashChunk chunk) throws IOException,
 		} catch (IOException e) {
 			SDFSLogger.getLog().fatal(
 					"Unable to commit chunk "
-							+ StringUtils.getHexString(chunk.getName()), e);
+							+ StringUtils.getHexString(chunk.getName()),
+					e);
 			throw e;
 		} catch (HashtableFullException e) {
 			SDFSLogger.getLog().fatal(
 					"Unable to commit chunk "
-							+ StringUtils.getHexString(chunk.getName()), e);
+							+ StringUtils.getHexString(chunk.getName()),
+					e);
 			throw e;
 		}
 
@@ -305,8 +333,8 @@ public InsertRecord addHashChunk(HashChunk chunk) throws IOException,
 
 	/**
 	 * Closes the hash store. The hash store should always be closed.
-	 * 
-	 * 
+	 *
+	 *
 	 */
 	public void close() {
 		this.closed = true;
@@ -322,4 +350,12 @@ public boolean isClosed() {
 		return this.closed;
 	}
 
+	public boolean get_move_blob() {
+		return HCServiceProxy.getChunkStore().get_move_blob();
+	}
+
+	public void set_move_blob(boolean status) {
+		HCServiceProxy.getChunkStore().set_move_blob(status);
+	}
+
 }
diff --git a/src/org/opendedup/sdfs/filestore/MetaFileStore.java b/src/org/opendedup/sdfs/filestore/MetaFileStore.java
index 12cfbf48d..19d6f0ce4 100755
--- a/src/org/opendedup/sdfs/filestore/MetaFileStore.java
+++ b/src/org/opendedup/sdfs/filestore/MetaFileStore.java
@@ -32,14 +32,14 @@
 import com.google.common.eventbus.EventBus;
 
 /**
- * 
+ *
  * @author Sam Silverberg
- * 
+ *
  *         The MetaFileStore is a static class used to get, update, create, or
  *         clone MetaDataDedup files. MetaDataDedupFile(s) are serialized to a
  *         JDBM database with a key of the uuid for the MetaDataDedupFile.
- * 
- * 
+ *
+ *
  */
 public class MetaFileStore {
 	private static EventBus eventBus = new EventBus();
@@ -95,8 +95,8 @@ public static boolean rename(String src, String dst) throws IOException {
 		WriteLock l = getMFLock.writeLock();
 		l.lock();
 		try {
-			if (SDFSLogger.isDebug())
-				SDFSLogger.getLog().debug("removing [" + dst + "] and replacing with [" + src + "]");
+
+			SDFSLogger.getLog().debug("removing [" + dst + "] and replacing with [" + src + "]");
 			MetaDataDedupFile mf = getMF(src);
 			if (new File(dst).exists()) {
 				MetaDataDedupFile _mf = getMF(dst);
@@ -127,7 +127,7 @@ public static boolean deletePending(String path) {
 
 	/**
 	 * Removes a cached file from the pathmap
-	 * 
+	 *
 	 * @param path the path of the MetaDataDedupFile
 	 */
 	public static void removedCachedMF(String path) {
@@ -139,7 +139,7 @@ public static void addToCache(MetaDataDedupFile mf) {
 	}
 
 	/**
-	 * 
+	 *
 	 * @param path the path to the MetaDataDedupFile
 	 * @return the MetaDataDedupFile
 	 */
@@ -233,7 +233,7 @@ public static MetaDataDedupFile getMF(String filePath) {
 	}
 
 	/**
-	 * 
+	 *
 	 * @param parent path for the parent
 	 * @param child  the child file
 	 * @return the MetaDataDedupFile associated with this path.
@@ -245,7 +245,7 @@ public static MetaDataDedupFile getMF(File parent, String child) {
 
 	/**
 	 * Clones a MetaDataDedupFile and the DedupFile.
-	 * 
+	 *
 	 * @param origionalPath the path of the source
 	 * @param snapPath      the path of the destination
 	 * @param overwrite     whether or not to overwrite the destination if it exists
@@ -259,7 +259,7 @@ public static MetaDataDedupFile snapshot(String origionalPath, String snapPath,
 
 	/**
 	 * Clones a MetaDataDedupFile and the DedupFile.
-	 * 
+	 *
 	 * @param origionalPath  the path of the source
 	 * @param snapPath       the path of the destination
 	 * @param overwrite      whether or not to overwrite the destination if it
@@ -286,7 +286,7 @@ public static MetaDataDedupFile snapshot(String origionalPath, String snapPath,
 				} catch (IOException e) {
 					SDFSLogger.getLog().error("error symlinking " + origionalPath + " to " + snapPath, e);
 				}
-				
+
 				return getMF(new File(snapPath));
 			} else {
 
@@ -301,18 +301,20 @@ public static MetaDataDedupFile snapshot(String origionalPath, String snapPath,
 					return _mf;
 				}
 			}
-		} catch(Exception e) {
-			SDFSLogger.getLog().error("error creating snapshot for" + origionalPath + " to " + snapPath,e);
-			evt.endEvent("Error Creating snapshot for" + origionalPath + " to " + snapPath + " error: " +e.getMessage(), SDFSEvent.ERROR);
+		} catch (Exception e) {
+			SDFSLogger.getLog().error("error creating snapshot for" + origionalPath + " to " + snapPath, e);
+			evt.endEvent(
+					"Error Creating snapshot for" + origionalPath + " to " + snapPath + " error: " + e.getMessage(),
+					SDFSEvent.ERROR);
 			throw new IOException(e);
-		}finally {
+		} finally {
 
 		}
 	}
 
 	/**
 	 * Commits data to the jdbm database
-	 * 
+	 *
 	 * @return true if committed
 	 */
 	public static boolean commit() {
@@ -327,7 +329,7 @@ public static boolean commit() {
 
 	/**
 	 * Removes a file from the jdbm db
-	 * 
+	 *
 	 * @param guid the guid for the MetaDataDedupFile
 	 */
 
@@ -337,8 +339,7 @@ public static boolean removeMetaFile(String path) {
 
 	public static boolean removeMetaFile(String path, boolean localOnly, boolean force, boolean async) {
 
-		if (SDFSLogger.isDebug())
-			SDFSLogger.getLog().debug("deleting " + path);
+		SDFSLogger.getLog().debug("deleting " + path);
 		WriteLock l = getMFLock.writeLock();
 		l.lock();
 		try {
@@ -384,10 +385,10 @@ public static boolean removeMetaFile(String path, boolean localOnly, boolean for
 						}
 						mf = getMF(new File(path));
 						pathMap.invalidate(mf.getPath());
-						if (!localOnly){
-							try{
-							eventBus.post(new MFileDeleted(mf, true));
-							}catch(Exception e) {
+						if (!localOnly) {
+							try {
+								eventBus.post(new MFileDeleted(mf, true));
+							} catch (Exception e) {
 								SDFSLogger.getLog().error("unable to delete file " + path, e);
 							}
 						}
diff --git a/src/org/opendedup/sdfs/filestore/NullChunkStore.java b/src/org/opendedup/sdfs/filestore/NullChunkStore.java
index eec0cd459..026041c94 100644
--- a/src/org/opendedup/sdfs/filestore/NullChunkStore.java
+++ b/src/org/opendedup/sdfs/filestore/NullChunkStore.java
@@ -4,22 +4,23 @@
 import java.util.concurrent.atomic.AtomicLong;
 
 import org.opendedup.collections.DataArchivedException;
+import org.opendedup.collections.InsertRecord;
 import org.opendedup.sdfs.Main;
 import org.w3c.dom.Element;
 
 /**
- * 
+ *
  * @author Sam Silverberg
- * 
+ *
  *         The NullChunkStore does not write data do a filesystem at all. It can
  *         be used for testing.
- * 
- * 
+ *
+ *
  */
 
 public class NullChunkStore implements AbstractChunkStore {
 	// AtomicLong sz = new AtomicLong(0);
-	
+
 	AtomicLong sz = new AtomicLong();
 	@Override
 	public long bytesRead() {
@@ -91,10 +92,11 @@ public long getFreeBlocks() {
 	}
 
 	@Override
-	public long writeChunk(byte[] hash, byte[] chunk, int len,String uuid)
+	public InsertRecord writeChunk(byte[] hash, byte[] chunk, int len,String uuid)
 			throws IOException {
 		this.sz.addAndGet(chunk.length);
-		return 0;
+
+		return new InsertRecord(true, 0,0);
 	}
 
 	@Override
@@ -203,7 +205,7 @@ public void cacheData(long len) throws IOException,
 	@Override
 	public void clearCounters() {
 		// TODO Auto-generated method stub
-		
+
 	}
 
 	@Override
@@ -212,4 +214,16 @@ public long getAllObjSummary(String pp, long id) throws IOException {
 		return 0;
 	}
 
+	@Override
+	public boolean get_move_blob() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	@Override
+	public void set_move_blob(boolean status) {
+		// TODO Auto-generated method stub
+
+	}
+
 }
diff --git a/src/org/opendedup/sdfs/filestore/OpenFileMonitor.java b/src/org/opendedup/sdfs/filestore/OpenFileMonitor.java
index 83733f76b..1eb018102 100644
--- a/src/org/opendedup/sdfs/filestore/OpenFileMonitor.java
+++ b/src/org/opendedup/sdfs/filestore/OpenFileMonitor.java
@@ -8,14 +8,14 @@
 import org.opendedup.sdfs.io.DedupFile;
 
 /**
- * 
+ *
  * @author Sam Silverberg
- * 
+ *
  *         This class initiates a thread that is used to monitor open files
  *         within the DedupFileStore. It will close them if left open and
  *         untouched for longer than the @see
  *         com.annesam.sdfs.Main#maxInactiveFileTime .
- * 
+ *
  */
 public class OpenFileMonitor implements Runnable {
 
@@ -27,12 +27,13 @@ public class OpenFileMonitor implements Runnable {
 
 	/**
 	 * Instantiates the OpenFileMonitor
-	 * 
+	 *
 	 * @param interval
-	 *            the interval to check for inactive files
+	 *                    the interval to check for inactive files
 	 * @param maxInactive
-	 *            the maximum time allowed for a file to be inactive. Inactivity
-	 *            is determined by last accessed time.
+	 *                    the maximum time allowed for a file to be inactive.
+	 *                    Inactivity
+	 *                    is determined by last accessed time.
 	 */
 	public OpenFileMonitor(int interval, int maxInactive) {
 		this.interval = interval;
@@ -63,19 +64,20 @@ public void run() {
 									if (df != null) {
 										DedupFileStore.getDedupFile(
 												df.getMetaFile()).forceClose();
-										if (SDFSLogger.isDebug())
-											SDFSLogger
-													.getLog()
-													.debug("Closing ["
-															+ df.getMetaFile()
-																	.getPath()
-															+ "] because its stale");
+
+										SDFSLogger
+												.getLog()
+												.debug("Closing ["
+														+ df.getMetaFile()
+																.getPath()
+														+ "] because its stale");
 									}
 								} catch (Exception e) {
 									SDFSLogger.getLog().warn(
 											"Unable close file for "
 													+ df.getMetaFile()
-															.getPath(), e);
+															.getPath(),
+											e);
 								}
 							} else if (!Main.safeSync) {
 								df.sync(true);
@@ -104,9 +106,9 @@ public void run() {
 
 	/**
 	 * Checks if a file should be closed
-	 * 
+	 *
 	 * @param df
-	 *            the DedupFile to check
+	 *           the DedupFile to check
 	 * @return true if stale.
 	 * @throws IOException
 	 */
@@ -117,11 +119,11 @@ public boolean isFileStale(DedupFile df) throws IOException {
 			long currentTime = System.currentTimeMillis();
 			long staleTime = 0;
 			try {
-				if(df.getMetaFile() == null)
+				if (df.getMetaFile() == null)
 					return true;
 				else
 					staleTime = df.getMetaFile().getLastAccessed()
-						+ this.maxInactive;
+							+ this.maxInactive;
 			} catch (Exception e) {
 				SDFSLogger.getLog().error("error checking last accessed", e);
 			}
@@ -131,7 +133,7 @@ public boolean isFileStale(DedupFile df) throws IOException {
 
 	/**
 	 * Closes the OpenFileMonitor thread.
-	 * 
+	 *
 	 * @throws InterruptedException
 	 */
 	public void close() {
diff --git a/src/org/opendedup/sdfs/filestore/cloud/BatchAwsS3ChunkStore.java b/src/org/opendedup/sdfs/filestore/cloud/BatchAwsS3ChunkStore.java
index a14df2682..d63b004fe 100644
--- a/src/org/opendedup/sdfs/filestore/cloud/BatchAwsS3ChunkStore.java
+++ b/src/org/opendedup/sdfs/filestore/cloud/BatchAwsS3ChunkStore.java
@@ -23,7 +23,6 @@
 import java.io.BufferedInputStream;
 import java.io.BufferedOutputStream;
 import java.io.ByteArrayInputStream;
-import java.io.DataInputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
@@ -101,6 +100,11 @@
 import com.amazonaws.services.s3.model.S3Object;
 import com.amazonaws.services.s3.model.S3ObjectInputStream;
 import com.amazonaws.services.s3.model.S3ObjectSummary;
+import com.amazonaws.services.s3.model.SSEAlgorithm;
+import com.amazonaws.services.s3.model.ServerSideEncryptionByDefault;
+import com.amazonaws.services.s3.model.ServerSideEncryptionConfiguration;
+import com.amazonaws.services.s3.model.ServerSideEncryptionRule;
+import com.amazonaws.services.s3.model.SetBucketEncryptionRequest;
 import com.amazonaws.services.s3.model.StorageClass;
 import com.amazonaws.services.s3.model.Tier;
 import com.amazonaws.services.s3.model.UploadPartRequest;
@@ -126,6 +130,7 @@
 import org.apache.http.conn.ssl.TrustStrategy;
 import org.opendedup.collections.DataArchivedException;
 import org.opendedup.collections.HashExistsException;
+import org.opendedup.collections.InsertRecord;
 import org.opendedup.fsync.SyncFSScheduler;
 import org.opendedup.grpc.CloudFileInfo.CloudMetaData;
 import org.opendedup.grpc.FileInfo.FileInfoResponse;
@@ -142,6 +147,7 @@
 import org.opendedup.sdfs.servers.HCServiceProxy;
 import org.opendedup.util.CompressionUtils;
 import org.opendedup.util.EncryptUtils;
+import org.opendedup.util.FileHashing;
 import org.opendedup.util.OSValidator;
 import org.opendedup.util.PassPhrase;
 import org.opendedup.util.RandomGUID;
@@ -169,6 +175,7 @@ public class BatchAwsS3ChunkStore implements AbstractChunkStore, AbstractBatchSt
 	boolean deleteUnclaimed = true;
 	boolean md5sum = true;
 	boolean simpleS3 = false;
+	boolean encryptBucket = false;
 	private int glacierDays = 0;
 	private boolean useGlacier = false;
 	private int infrequentAccess = 0;
@@ -186,7 +193,7 @@ public class BatchAwsS3ChunkStore implements AbstractChunkStore, AbstractBatchSt
 	private String secretKey = Main.cloudSecretKey;
 	private boolean standAlone = true;
 	private int transferSize = 10 * 1024 * 1024;
-	private com.amazonaws.services.s3.model.Tier glacierTier = Tier.Standard;
+	private com.amazonaws.services.s3.model.Tier glacierTier = Tier.Bulk;
 	boolean gcsSigner = false;
 	TransferManager tx = null;
 	static {
@@ -254,13 +261,12 @@ public long bytesWritten() {
 
 	@Override
 	public void close() {
-		this.closed = true;
+		
 		try {
 			SDFSLogger.getLog().info("############ Closing Bucket##################");
 			if (this.standAlone) {
 				HashBlobArchive.close();
 
-				ObjectMetadata omd = s3Service.getObjectMetadata(name, binm);
 				Map md = null;
 				md = this.getUserMetaData(binm);
 
@@ -299,6 +305,7 @@ public void close() {
 		} catch (Exception e) {
 			SDFSLogger.getLog().warn("error while closing bucket " + this.name, e);
 		} finally {
+			this.closed = true;
 			try {
 				tx.shutdownNow(false);
 				s3Service.shutdown();
@@ -346,7 +353,7 @@ public long size() {
 	}
 
 	@Override
-	public long writeChunk(byte[] hash, byte[] chunk, int len, String uuid) throws IOException {
+	public InsertRecord writeChunk(byte[] hash, byte[] chunk, int len, String uuid) throws IOException {
 		try {
 			return HashBlobArchive.writeBlock(hash, chunk, uuid);
 		} catch (HashExistsException e) {
@@ -447,7 +454,8 @@ public void init(Element config) throws IOException {
 				}
 				if (config.hasAttribute("allow-sync")) {
 					HashBlobArchive.allowSync = Boolean.parseBoolean(config.getAttribute("allow-sync"));
-					if (config.hasAttribute("sync-check-schedule")) {
+					if (config.hasAttribute("sync-check-schedule")
+							&& !config.getAttribute("sync-check-schedule").equalsIgnoreCase("none")) {
 						try {
 							new SyncFSScheduler(config.getAttribute("sync-check-schedule"));
 						} catch (Exception e) {
@@ -574,9 +582,9 @@ public void init(Element config) throws IOException {
 				}
 			} else if (config.hasAttribute("use-basic-signer")) {
 				boolean v4s = Boolean.parseBoolean(config.getAttribute("use-basic-signer"));
-				if (v4s) {
-					clientConfig.setSignerOverride("S3SignerType");
-				}
+				// if (v4s) {
+				// clientConfig.setSignerOverride("S3SignerType");
+				// }
 			} else if (gcsSigner) {
 				System.out.println("Target is GCS Storage");
 				Map env = System.getenv();
@@ -703,9 +711,15 @@ public boolean isTrusted(X509Certificate[] certificate, String authType) {
 					System.out.println("bucketLocation=" + bucketLocation.toString());
 					builder = builder.withRegion(bl);
 				} else if (s3Target != null) {
-					EndpointConfiguration ep = new EndpointConfiguration(s3Target, "us-east-1");
+					String[] tokens = s3Target.split("\\.");
+					String region = "us-west-2";
+					if (tokens.length > 1) {
+						region = tokens[1];
+					}
+					SDFSLogger.getLog().info("region=" + region);
+					EndpointConfiguration ep = new EndpointConfiguration(s3Target, region);
 					builder = builder.withEndpointConfiguration(ep);
-					System.out.println("target=" + s3Target);
+					SDFSLogger.getLog().info("target=" + s3Target);
 				} else {
 					String bl = "us-west-2";
 					System.out.println("bucketLocation=" + bl);
@@ -746,8 +760,18 @@ public boolean isTrusted(X509Certificate[] certificate, String authType) {
 				throw new IOException("Failed to connect to storage bucket. Exiting");
 			}
 			if (!s3Service.doesBucketExist(this.name)) {
+				this.encryptBucket = Main.encryptBucket;
 				s3Service.createBucket(this.name);
 				SDFSLogger.getLog().info("created new store " + name);
+				if (Main.encryptBucket) {
+					SDFSLogger.getLog().info("Setting server-side encryption on the store " + name);
+					s3Service.setBucketEncryption(new SetBucketEncryptionRequest()
+							.withBucketName(this.name)
+							.withServerSideEncryptionConfiguration(new ServerSideEncryptionConfiguration()
+									.withRules(new ServerSideEncryptionRule()
+											.withApplyServerSideEncryptionByDefault(new ServerSideEncryptionByDefault()
+													.withSSEAlgorithm(SSEAlgorithm.AES256)))));
+				}
 				if (this.standAlone) {
 					ObjectMetadata md = new ObjectMetadata();
 					md.addUserMetadata("currentsize", "0");
@@ -866,7 +890,7 @@ public boolean isTrusted(X509Certificate[] certificate, String authType) {
 				}
 			}
 			ArrayList trs = new ArrayList();
-			if (this.useGlacier && s3Target == null) {
+			if (this.useGlacier && s3Target != null) {
 				Transition transToArchive = new Transition().withDays(this.glacierDays)
 						.withStorageClass(StorageClass.Glacier);
 				trs.add(transToArchive);
@@ -879,6 +903,7 @@ public boolean isTrusted(X509Certificate[] certificate, String authType) {
 
 			}
 			if (trs.size() > 0) {
+				SDFSLogger.getLog().info("Setting S3 bucket lifecycle configuration");
 				BucketLifecycleConfiguration.Rule ruleArchiveAndExpire = new BucketLifecycleConfiguration.Rule()
 						.withId("SDFS Automated Archive Rule for Block Data")
 						.withFilter(new LifecycleFilter(new LifecyclePrefixPredicate("blocks/"))).withTransitions(trs)
@@ -959,6 +984,7 @@ private String[] getStrings(S3Object sobj) throws IOException {
 			throw new IOException(e);
 		} finally {
 			try {
+				in.abort();
 				in.close();
 				sobj.close();
 			} catch (Exception e) {
@@ -1265,6 +1291,7 @@ public byte[] getBytes(long id, int from, int to) throws IOException, DataArchiv
 			if (ncl != cl) {
 				SDFSLogger.getLog().warn("Read less bytes that expected. Expected " + cl + " read " + ncl);
 			}
+			in.abort();
 			IOUtils.closeQuietly(in);
 			double dtm = (System.currentTimeMillis() - tm) / 1000d;
 			double bps = (ncl / 1024) / dtm;
@@ -1317,6 +1344,7 @@ public byte[] getBytes(long id, int from, int to) throws IOException, DataArchiv
 		} finally {
 			try {
 				if (sobj != null) {
+					sobj.getObjectContent().abort();
 					sobj.close();
 				}
 			} catch (Exception e) {
@@ -1370,7 +1398,7 @@ private void getData(long id, File f) throws DataArchivedException, IOException
 			if (this.simpleS3) {
 
 				FileOutputStream out = null;
-				InputStream in = null;
+				S3ObjectInputStream in = null;
 				try {
 
 					out = new FileOutputStream(f);
@@ -1383,6 +1411,7 @@ private void getData(long id, File f) throws DataArchivedException, IOException
 					f.delete();
 					throw new IOException(e);
 				} finally {
+					in.abort();
 					IOUtils.closeQuietly(out);
 					IOUtils.closeQuietly(in);
 				}
@@ -1481,6 +1510,7 @@ private void getData(long id, File f) throws DataArchivedException, IOException
 		} finally {
 			try {
 				if (sobj != null) {
+					sobj.getObjectContent().abort();
 					sobj.close();
 				}
 			} catch (Exception e) {
@@ -1543,8 +1573,10 @@ public Map getUserMetaData(String name) throws IOException {
 			} catch (Exception e) {
 				throw new IOException(e);
 			} finally {
-				if (in != null)
+				if (in != null) {
+					in.abort();
 					IOUtils.closeQuietly(in);
+				}
 				sobj.close();
 			}
 		} else {
@@ -1774,8 +1806,10 @@ public StringResult getStringResult(String key) throws IOException, InterruptedE
 			} catch (Exception e) {
 				throw new IOException(e);
 			} finally {
-				if (in != null)
+				if (in != null) {
+					in.abort();
 					in.close();
+				}
 				if (sobj != null) {
 					sobj.close();
 				}
@@ -1861,6 +1895,7 @@ else if (lz4compress) {
 		} finally {
 			if (sobj != null)
 				try {
+					sobj.getObjectContent().close();
 					sobj.close();
 				} catch (Exception e) {
 				}
@@ -2030,7 +2065,7 @@ public void uploadFile(File f, String to, String pp, HashMap met
 					try {
 						md.setContentType("binary/octet-stream");
 						in = new BufferedInputStream(new FileInputStream(p), 32768);
-						byte[] md5Hash = Hashing.md5().hashBytes(in.readAllBytes()).asBytes();
+						byte[] md5Hash = FileHashing.checksuMD5(p.getPath());
 						in.close();
 						String mds = BaseEncoding.base64().encode(md5Hash);
 						md.setContentMD5(mds);
@@ -2129,11 +2164,13 @@ private void multiPartDownload(String keyName, File f)
 			throws AmazonServiceException, AmazonClientException, InterruptedException, IOException {
 		if (this.gcsSigner) {
 			S3Object obj = s3Service.getObject(this.name, keyName);
+			S3ObjectInputStream is = obj.getObjectContent();
 			BufferedInputStream in = new BufferedInputStream(obj.getObjectContent());
 			BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(f));
 			IOUtils.copy(in, out);
 			out.flush();
 			out.close();
+			is.abort();
 			in.close();
 			obj.close();
 		} else {
@@ -2181,6 +2218,7 @@ public void downloadFile(String nm, File to, String pp) throws IOException {
 				IOUtils.copy(in, out);
 				out.flush();
 				out.close();
+				obj.getObjectContent().abort();
 				in.close();
 				mp = this.getUserMetaData(pp + "/" + haName);
 				SDFSLogger.getLog().debug("mp sz=" + mp.size());
@@ -2481,6 +2519,7 @@ public Map getHashMap(long id) throws IOException {
 		} finally {
 			// this.s3clientLock.readLock().unlock();
 			try {
+				kobj.getObjectContent().abort();
 				kobj.close();
 			} catch (Exception e) {
 			}
@@ -2554,6 +2593,16 @@ public long getMaxCacheSize() {
 	@Override
 	public synchronized String restoreBlock(long id, byte[] hash) throws IOException {
 		SDFSLogger.getLog().info("restoring block " + id);
+		if (!Main.retrievalTier.equals("")) {
+			String ts = Main.retrievalTier;
+			if (ts.equalsIgnoreCase("standard"))
+				this.glacierTier = Tier.Standard;
+			if (ts.equalsIgnoreCase("expedited"))
+				this.glacierTier = Tier.Expedited;
+			if (ts.equalsIgnoreCase("bulk"))
+				this.glacierTier = Tier.Bulk;
+			SDFSLogger.getLog().info("restoring block using retrieval policy: " + this.glacierTier);
+		}
 		if (id == -1) {
 			SDFSLogger.getLog().warn("Hash not found for " + StringUtils.getHexString(hash));
 			return null;
@@ -2571,7 +2620,7 @@ else if (haName.equalsIgnoreCase("InvalidObjectState"))
 		for (int i = 0; i < 9; i++) {
 			try {
 
-				RestoreObjectRequest request = new RestoreObjectRequest(this.name, "blocks/" + haName + this.dExt, 2);
+				RestoreObjectRequest request = new RestoreObjectRequest(this.name, "blocks/" + haName + this.dExt, 30);
 				GlacierJobParameters params = new GlacierJobParameters();
 				params.setTier(this.glacierTier);
 				request.setGlacierJobParameters(params);
@@ -2584,7 +2633,10 @@ else if (haName.equalsIgnoreCase("InvalidObjectState"))
 					return null;
 				}
 				request = new RestoreObjectRequest(this.name, "blocks/" + haName + mdExt, 2);
+				request.setGlacierJobParameters(params);
 				s3Service.restoreObject(request);
+				SDFSLogger.getLog().info("restoring block [" + id + "] at [blocks/" + haName + mdExt + "] from glacier "
+						+ this.glacierTier.toString());
 				restoreRequests.put(Long.valueOf(id), haName);
 				return haName;
 			} catch (AmazonS3Exception e) {
@@ -2630,24 +2682,29 @@ public boolean blockRestored(String id) {
 
 		try {
 			ObjectMetadata omd = s3Service.getObjectMetadata(this.name, "blocks/" + id + this.dExt);
-			ObjectMetadata momd = omd;
-			momd = s3Service.getObjectMetadata(this.name, "blocks/" + id + mdExt);
+			ObjectMetadata momd = s3Service.getObjectMetadata(this.name, "blocks/" + id + mdExt);
 			if (omd == null || momd == null) {
 				SDFSLogger.getLog().warn("Object with id " + id + " is null");
 				return false;
-			} else if (omd.getStorageClass() == null) {
-				return true;
-			} else if (!omd.getStorageClass().equalsIgnoreCase("GLACIER")
-					&& !momd.getStorageClass().equalsIgnoreCase("GLACIER")) {
-				SDFSLogger.getLog().warn("Object with id " + id + " is restored");
-				return true;
-			} else if (omd.getOngoingRestore() || momd.getOngoingRestore()) {
+			}
+			if (omd.getOngoingRestore() || momd.getOngoingRestore()) {
 				SDFSLogger.getLog().warn("Object with id " + id + " is still restoring");
 				return false;
-			} else
+			} else if (omd.getStorageClass() == null && omd.getStorageClass() == null) {
+				SDFSLogger.getLog().warn("Block Object and md with id " + id + " is restored sc = null");
 				return true;
+			} else if (omd.getStorageClass() != null && omd.getStorageClass().equalsIgnoreCase("GLACIER")) {
+				SDFSLogger.getLog().warn("Block Object with id " + id + " is still glacier");
+				return false;
+			} else if (momd.getStorageClass() != null && !momd.getStorageClass().equalsIgnoreCase("GLACIER")) {
+				SDFSLogger.getLog().warn("Metadata Object with id " + id + " is still glacier");
+				return false;
+			} else {
+				SDFSLogger.getLog().warn("Object with id " + id + " preconditions met for glacier restore");
+				return true;
+			}
 		} catch (Exception e) {
-			SDFSLogger.getLog().warn("error while checking block restored", e);
+			SDFSLogger.getLog().error("error while checking block restored", e);
 			return false;
 		}
 	}
@@ -2691,9 +2748,9 @@ public boolean checkAccess(String username, String password, Properties props) t
 			}
 			if (props.containsKey("use-basic-signer")) {
 				boolean v4s = Boolean.parseBoolean(props.getProperty("use-basic-signer"));
-				if (v4s) {
-					clientConfig.setSignerOverride("S3SignerType");
-				}
+				// if (v4s) {
+				// clientConfig.setSignerOverride("S3SignerType");
+				// }
 			}
 			if (props.containsKey("protocol")) {
 				String pr = props.getProperty("protocol");
@@ -3124,7 +3181,8 @@ private static class DeleteObject implements Runnable {
 		@Override
 		public void run() {
 			try {
-				String hashString = EncyptUtils.encHashArchiveName(k.longValue(), Main.chunkStoreEncryptionEnabled);
+				// String hashString = EncyptUtils.encHashArchiveName(k.longValue(),
+				// Main.chunkStoreEncryptionEnabled);
 
 				String name = st.getClaimName(k.longValue());
 				if (st.s3Service.doesObjectExist(st.name, name)) {
@@ -3303,4 +3361,12 @@ public FileInfoResponse getAttr(String name) throws NullPointerException, IOExce
 		return null;
 	}
 
+	@Override
+	public boolean get_move_blob() {
+		return false;
+	}
+
+	@Override
+	public void set_move_blob(boolean status) {
+	}
 }
diff --git a/src/org/opendedup/sdfs/filestore/cloud/BatchAzureChunkStore.java b/src/org/opendedup/sdfs/filestore/cloud/BatchAzureChunkStore.java
index 428d63f14..0e7b60a6f 100644
--- a/src/org/opendedup/sdfs/filestore/cloud/BatchAzureChunkStore.java
+++ b/src/org/opendedup/sdfs/filestore/cloud/BatchAzureChunkStore.java
@@ -10,6 +10,8 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.Proxy;
 import java.nio.ByteBuffer;
 import java.nio.file.Files;
 import java.nio.file.LinkOption;
@@ -47,6 +49,7 @@
 import com.microsoft.azure.storage.blob.CloudBlockBlob;
 import com.microsoft.azure.storage.blob.CopyStatus;
 import com.microsoft.azure.storage.blob.ListBlobItem;
+import com.microsoft.azure.storage.blob.RehydratePriority;
 import com.microsoft.azure.storage.blob.RehydrationStatus;
 import com.microsoft.azure.storage.blob.StandardBlobTier;
 import com.microsoft.azure.storage.core.Base64;
@@ -55,6 +58,8 @@
 import org.apache.commons.io.FilenameUtils;
 import org.opendedup.collections.DataArchivedException;
 import org.opendedup.collections.HashExistsException;
+import org.opendedup.collections.InsertRecord;
+import org.opendedup.fsync.SyncFSScheduler;
 import org.opendedup.grpc.FileInfo.FileInfoResponse;
 import org.opendedup.logging.SDFSLogger;
 import org.opendedup.sdfs.Main;
@@ -77,13 +82,13 @@
 import org.w3c.dom.NamedNodeMap;
 
 /**
- * 
+ *
  * @author Sam Silverberg The S3 chunk store implements the AbstractChunkStore
  *         and is used to store deduped chunks to AWS S3 data storage. It is
  *         used if the aws tag is used within the chunk store config file. It is
  *         important to make the chunk size very large on the client when using
  *         this chunk store since S3 charges per http request.
- * 
+ *
  */
 
 public class BatchAzureChunkStore implements AbstractChunkStore, AbstractBatchStore, Runnable, AbstractCloudFileSync {
@@ -95,6 +100,7 @@ public class BatchAzureChunkStore implements AbstractChunkStore, AbstractBatchSt
 	OperationContext opContext = new OperationContext();
 	private HashMap deletes = new HashMap();
 	boolean closed = false;
+	boolean move_blob = false;
 	boolean deleteUnclaimed = true;
 	boolean clustered = true;
 	private int checkInterval = 15000;
@@ -204,23 +210,11 @@ public void cacheData(long start) throws IOException, DataArchivedException {
 
 	@Override
 	public long size() {
-		// TODO Auto-generated method stub
-		try {
-			RemoteVolumeInfo[] rv = this.getConnectedVolumes();
-			long sz = 0;
-			for (RemoteVolumeInfo r : rv) {
-				sz += r.data;
-			}
-			return sz;
-		} catch (Exception e) {
-			SDFSLogger.getLog().warn("unable to get clustered compressed size", e);
-		}
-		// return HashBlobArchive.getCompressedLength();
 		return HashBlobArchive.getLength();
 	}
 
 	@Override
-	public long writeChunk(byte[] hash, byte[] chunk, int len, String uuid) throws IOException {
+	public InsertRecord writeChunk(byte[] hash, byte[] chunk, int len, String uuid) throws IOException {
 		try {
 			return HashBlobArchive.writeBlock(hash, chunk, uuid);
 		} catch (HashExistsException e) {
@@ -352,7 +346,7 @@ public void init(Element config) throws IOException {
 		if (this.standAlone && config.hasAttribute("upload-thread-sleep-time")) {
 			int tm = Integer.parseInt(config.getAttribute("upload-thread-sleep-time"));
 			HashBlobArchive.THREAD_SLEEP_TIME = tm;
-		}else {
+		} else {
 			HashBlobArchive.THREAD_SLEEP_TIME = 1000 * 60 * 10;
 		}
 		if (config.hasAttribute("single-writer")) {
@@ -425,14 +419,28 @@ public void init(Element config) throws IOException {
 
 			account = CloudStorageAccount.parse(storageConnectionString);
 			serviceClient = account.createCloudBlobClient();
+
+			String proxy = System.getenv("HTTP_PROXY");
+			SDFSLogger.getLog().info("PROXY= " + proxy);
+			if (proxy != null) {
+				String[] tokens = proxy.split(":");
+				String hostname = tokens[1].substring(2);// proxy env variable will be in the form
+															// http://proxy_server:proxt_port
+				String port = tokens[2];
+				int Port = Integer.parseInt(port);
+				SDFSLogger.getLog().info("proxyhostname=" + hostname);
+				SDFSLogger.getLog().info("proxyport=" + Port);
+				OperationContext.setDefaultProxy(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(hostname, Port)));
+			}
+
 			serviceClient.getDefaultRequestOptions().setConcurrentRequestCount(Main.dseIOThreads * 2);
 			if (tier != null && (tier.equals(StandardBlobTier.ARCHIVE) || tier.equals(StandardBlobTier.COOL))) {
 				this.bio = new BlobDataIO(this.name + "table", this.accessKey, this.secretKey, connectionProtocol);
 			}
 			/*
 			 * serviceClient.getDefaultRequestOptions().setTimeoutIntervalInMs( 10 * 1000);
-			 * 
-			 * 
+			 *
+			 *
 			 * serviceClient.getDefaultRequestOptions().setRetryPolicyFactory( new
 			 * RetryExponentialRetry(500, 5));
 			 */
@@ -511,6 +519,18 @@ else if (md.containsKey("clustered"))
 				HashBlobArchive.setLength(sz);
 				HashBlobArchive.setCompressedLength(cl);
 
+				if (config.hasAttribute("allow-sync")) {
+					HashBlobArchive.allowSync = Boolean.parseBoolean(config.getAttribute("allow-sync"));
+					if (config.hasAttribute("sync-check-schedule")
+							&& !config.getAttribute("sync-check-schedule").equalsIgnoreCase("none")) {
+						try {
+							new SyncFSScheduler(config.getAttribute("sync-check-schedule"));
+						} catch (Exception e) {
+							SDFSLogger.getLog().error("unable to start sync scheduler", e);
+						}
+					}
+
+				}
 			}
 		} catch (Exception e) {
 			throw new IOException(e);
@@ -645,16 +665,6 @@ public long maxSize() {
 
 	@Override
 	public long compressedSize() {
-		try {
-			RemoteVolumeInfo[] rv = this.getConnectedVolumes();
-			long sz = 0;
-			for (RemoteVolumeInfo r : rv) {
-				sz += r.compressed;
-			}
-			return sz;
-		} catch (Exception e) {
-			SDFSLogger.getLog().warn("unable to get clustered compressed size", e);
-		}
 		return HashBlobArchive.getCompressedLength();
 	}
 
@@ -975,16 +985,29 @@ public int verifyDelete(long id) throws IOException {
 							}
 						}
 					} catch (Exception e) {
-						SDFSLogger.getLog().warn("unable to remove " + id + " from tablelob", e);
+						SDFSLogger.getLog().debug("unable to remove " + id + " from tablelob", e);
 
 					}
 					if (!container.listBlobs("claims/keys/" + haName).iterator().hasNext()) {
-						kblob.delete();
+						try {
+							kblob.delete();
+						} catch (Exception e) {
+							SDFSLogger.getLog().debug("unable to delete " + kblob.getName(), e);
+						}
 						kblob = container.getBlockBlobReference("blocks/" + haName);
-						kblob.delete();
+
+						try {
+							kblob.delete();
+						} catch (Exception e) {
+							SDFSLogger.getLog().debug("unable to delete " + kblob.getName(), e);
+						}
 						kblob = container.getBlockBlobReference("keys/" + haName);
-						kblob.delete();
-						SDFSLogger.getLog().info("deleted block " + id + " name=blocks/" + haName);
+						try {
+							kblob.delete();
+						} catch (Exception e) {
+							SDFSLogger.getLog().debug("unable to delete " + kblob.getName(), e);
+						}
+						SDFSLogger.getLog().debug("deleted block " + id + " name=blocks/" + haName);
 					}
 				} else {
 					kblob.delete();
@@ -1052,6 +1075,8 @@ public void run() {
 						this.refresh.clear();
 					}
 					long currentTime = System.currentTimeMillis();
+					if(get_move_blob())
+						this.closed=true;
 					if (currentTime > startTime) {
 						Iterable tri = null;
 						if (this.tierImmedately) {
@@ -1082,6 +1107,9 @@ public void run() {
 
 				if (this.deletes.size() > 0) {
 					this.delLock.lock();
+					long rcsz = 0;
+					long rsz = 0;
+					long ct = 0;
 					HashMap odel = null;
 					try {
 						odel = this.deletes;
@@ -1116,23 +1144,29 @@ public void run() {
 								if (objs <= delobj) {
 									int size = Integer.parseInt((String) metaData.get("size"));
 									int compressedSize = Integer.parseInt((String) metaData.get("compressedsize"));
+									
 									if (this.standAlone) {
 										if (HashBlobArchive.getCompressedLength() > 0) {
 											HashBlobArchive.addToCompressedLength((-1 * compressedSize));
-										} else if (HashBlobArchive.getCompressedLength() < 0)
+										} else {
 											HashBlobArchive.setCompressedLength(0);
+										}
 
 										if (HashBlobArchive.getLength() > 0) {
 											HashBlobArchive.addToLength(-1 * size);
-										} else if (HashBlobArchive.getLength() < 0)
+										} else {
 											HashBlobArchive.setLength(0);
-										else
-											HashBlobArchive.setLength(-1 * size);
+										}
+
 									}
+
 									HashBlobArchive.removeLocalArchive(k.longValue());
 									if (this.deleteUnclaimed) {
 										SDFSLogger.getLog().debug("checking to delete " + k.longValue());
 										this.verifyDelete(k.longValue());
+										rcsz += compressedSize;
+										rsz += size;
+										ct ++;
 									} else {
 										// SDFSLogger.getLog().info("deleting " +
 										// hashString);
@@ -1162,6 +1196,8 @@ public void run() {
 										HashBlobArchive.removeLocalArchive(k.longValue());
 								}
 							}
+							SDFSLogger.getLog().info("Removed size=" + rsz + " of remove data compressed size " + 
+							rcsz + "removed blocks " + ct);
 						} catch (Exception e) {
 							delLock.lock();
 							try {
@@ -1614,7 +1650,20 @@ public String restoreBlock(long id, byte[] hash) throws IOException {
 			CloudBlockBlob blob = container.getBlockBlobReference("blocks/" + haName);
 			blob.downloadAttributes();
 			if (blob.getProperties().getStandardBlobTier().equals(StandardBlobTier.ARCHIVE)) {
-				blob.uploadStandardBlobTier(StandardBlobTier.HOT);
+				Main.rehydrateBlobs = true;
+				if (!Main.retrievalTier.equals("")) {
+					String ts = Main.retrievalTier;
+					if (ts.equalsIgnoreCase("high")) {
+						SDFSLogger.getLog().info("restoring block using rehydration priority: " + ts);
+						blob.uploadStandardBlobTier(StandardBlobTier.HOT, RehydratePriority.HIGH, null, null);
+					} else {
+						SDFSLogger.getLog().info("restoring block using rehydration priority: standard");
+						blob.uploadStandardBlobTier(StandardBlobTier.HOT);
+					}
+				} else {
+					SDFSLogger.getLog().info("restoring block using standard rehydration priority");
+					blob.uploadStandardBlobTier(StandardBlobTier.HOT);
+				}
 				bio.removeBlobDataTracker(id,
 						EncyptUtils.encHashArchiveName(Main.DSEID, Main.chunkStoreEncryptionEnabled));
 				this.restoreRequests.put(Long.valueOf(id), haName);
@@ -1643,7 +1692,21 @@ public boolean blockRestored(String id) {
 				if (blob.getProperties().getRehydrationStatus() == null
 						|| blob.getProperties().getRehydrationStatus().equals(RehydrationStatus.UNKNOWN)) {
 					SDFSLogger.getLog().warn("rehydration status unknow for " + id + " will attempt to rehydrate");
-					blob.uploadStandardBlobTier(StandardBlobTier.HOT);
+					if (!Main.retrievalTier.equals("")) {
+						String ts = Main.retrievalTier;
+						if (ts.equalsIgnoreCase("high")) {
+							SDFSLogger.getLog()
+									.info("blockRestored: restoring block using rehydration priority: " + ts);
+							blob.uploadStandardBlobTier(StandardBlobTier.HOT, RehydratePriority.HIGH, null, null);
+						} else {
+							SDFSLogger.getLog()
+									.info("blockRestored: restoring block using rehydration priority: standard");
+							blob.uploadStandardBlobTier(StandardBlobTier.HOT);
+						}
+					} else {
+						SDFSLogger.getLog().info("blockRestored: restoring block using standard rehydration priority");
+						blob.uploadStandardBlobTier(StandardBlobTier.HOT);
+					}
 				}
 				return false;
 			}
@@ -1653,6 +1716,16 @@ public boolean blockRestored(String id) {
 		}
 	}
 
+	@Override
+	public boolean get_move_blob() {
+		return this.move_blob;
+	}
+
+	@Override
+	public void set_move_blob(boolean status) {
+		this.move_blob = status;
+	}
+
 	@Override
 	public boolean checkAccess(String username, String password, Properties props) throws Exception {
 		String storageConnectionString = "DefaultEndpointsProtocol=" + props.getProperty("protocol") + ";"
@@ -1982,7 +2055,6 @@ public RemoteVolumeInfo[] getConnectedVolumes() throws IOException {
 			return ninfo;
 		}
 	}
-	
 
 	@Override
 	public byte[] getBytes(long id, int from, int to) throws IOException, DataArchivedException {
diff --git a/src/org/opendedup/sdfs/filestore/cloud/BatchJCloudChunkStore.java b/src/org/opendedup/sdfs/filestore/cloud/BatchJCloudChunkStore.java
index 7a61f95ed..bf5c1bdc3 100644
--- a/src/org/opendedup/sdfs/filestore/cloud/BatchJCloudChunkStore.java
+++ b/src/org/opendedup/sdfs/filestore/cloud/BatchJCloudChunkStore.java
@@ -64,6 +64,7 @@
 import org.jclouds.googlecloud.GoogleCredentialsFromJson;
 import org.opendedup.collections.DataArchivedException;
 import org.opendedup.collections.HashExistsException;
+import org.opendedup.collections.InsertRecord;
 import org.opendedup.grpc.CloudFileInfo.CloudMetaData;
 import org.opendedup.grpc.FileInfo.FileInfoResponse;
 import org.opendedup.logging.SDFSLogger;
@@ -298,7 +299,7 @@ public long size() {
 	}
 
 	@Override
-	public long writeChunk(byte[] hash, byte[] chunk, int len, String uuid) throws IOException {
+	public InsertRecord writeChunk(byte[] hash, byte[] chunk, int len, String uuid) throws IOException {
 		try {
 			return HashBlobArchive.writeBlock(hash, chunk, uuid);
 		} catch (HashExistsException e) {
@@ -2335,4 +2336,12 @@ public FileInfoResponse getAttr(String name) throws NullPointerException, IOExce
 		return null;
 	}
 
+	@Override
+	public boolean get_move_blob() {
+		return false;
+	}
+
+	@Override
+	public void set_move_blob(boolean status) {
+	}
 }
diff --git a/src/org/opendedup/sdfs/filestore/cloud/CloudRaidStore.java b/src/org/opendedup/sdfs/filestore/cloud/CloudRaidStore.java
deleted file mode 100644
index 763adaf8f..000000000
--- a/src/org/opendedup/sdfs/filestore/cloud/CloudRaidStore.java
+++ /dev/null
@@ -1,1643 +0,0 @@
-package org.opendedup.sdfs.filestore.cloud;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.net.InetAddress;
-import java.nio.ByteBuffer;
-import java.util.AbstractMap.SimpleImmutableEntry;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Properties;
-import java.util.Random;
-import java.util.Set;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.SynchronousQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicLong;
-import java.util.concurrent.locks.ReentrantLock;
-
-import javax.crypto.spec.IvParameterSpec;
-
-import com.google.common.io.BaseEncoding;
-
-import org.opendedup.collections.DataArchivedException;
-import org.opendedup.collections.HashExistsException;
-import org.opendedup.ec.ECIO;
-import org.opendedup.grpc.FileInfo.FileInfoResponse;
-import org.opendedup.logging.SDFSLogger;
-import org.opendedup.sdfs.Main;
-import org.opendedup.sdfs.filestore.AbstractBatchStore;
-import org.opendedup.sdfs.filestore.AbstractChunkStore;
-import org.opendedup.sdfs.filestore.ChunkData;
-import org.opendedup.sdfs.filestore.HashBlobArchive;
-import org.opendedup.sdfs.filestore.StringResult;
-import org.opendedup.sdfs.filestore.cloud.utils.EncyptUtils;
-import org.opendedup.sdfs.servers.HCServiceProxy;
-import org.opendedup.util.CompressionUtils;
-import org.opendedup.util.EncryptUtils;
-import org.opendedup.util.PassPhrase;
-import org.opendedup.util.StringUtils;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-
-public class CloudRaidStore implements AbstractChunkStore, AbstractBatchStore, Runnable, AbstractCloudFileSync {
-
-	String bucketLocation = null;
-	private String name;
-	private HashMap deletes = new HashMap();
-	boolean closed = false;
-	boolean deleteUnclaimed = true;
-	boolean clustered = true;
-	File staged_sync_location = new File(Main.chunkStore + File.separator + "syncstaged");
-	File ec_stage_location = new File(Main.chunkStore + File.separator + "ecstaged");
-	private int checkInterval = 15000;
-	private static final int version = 1;
-	private ArrayList datapools = new ArrayList();
-	private ArrayList metapools = new ArrayList();
-	private ArrayList stores = new ArrayList();
-	private ArrayList bucketSizes = new ArrayList();
-	private SortedBucketList sbl = new SortedBucketList();
-	private ECIO ecio = null;
-	private static CloudRaidStore cs = null;
-
-	private static enum RAID {
-		MIRROR, EC, STRIPE, CONCAT
-	};
-
-	private RAID rl = RAID.MIRROR;
-	private int ecn = 0;
-	private long partSize = Long.MAX_VALUE;
-
-	// private String bucketLocation = null;
-	static {
-
-	}
-
-	public static boolean checkAuth(String awsAccessKey, String awsSecretKey) {
-		return false;
-	}
-
-	public static boolean checkBucketUnique(String awsAccessKey, String awsSecretKey, String bucketName) {
-		return false;
-	}
-
-	public CloudRaidStore() {
-
-	}
-
-	@Override
-	public long bytesRead() {
-		return 0;
-	}
-
-	@Override
-	public long bytesWritten() {
-		return 0;
-	}
-
-	@Override
-	public void close() {
-
-		try {
-			SDFSLogger.getLog().info("############ Closing Container ##################");
-			// container = pool.borrowObject();
-			HashBlobArchive.close();
-			try {
-				this.setBucketMetaData();
-			} catch (Exception e) {
-				SDFSLogger.getLog().warn("unable to set bucket metadata", e);
-			}
-			for (AbstractChunkStore store : this.stores) {
-				store.close();
-			}
-			SDFSLogger.getLog().info("Updated container on close");
-			SDFSLogger.getLog().info("############ Container Closed ##################");
-		} catch (Exception e) {
-			SDFSLogger.getLog().error("error closing container", e);
-		} finally {
-			this.closed = true;
-		}
-		try {
-			// this.serviceClient.
-		} catch (Exception e) {
-
-		}
-	}
-
-	public void expandFile(long length) throws IOException {
-
-	}
-
-	@Override
-	public byte[] getChunk(byte[] hash, long start, int len) throws IOException, DataArchivedException {
-		return HashBlobArchive.getBlock(hash, start);
-
-	}
-
-	@Override
-	public String getName() {
-		return this.name;
-	}
-
-	@Override
-	public void setName(String name) {
-
-	}
-
-	public void cacheData(long start) throws IOException, DataArchivedException {
-		try {
-			HashBlobArchive.cacheArchive(start);
-		} catch (ExecutionException e) {
-			SDFSLogger.getLog().error("Unable to get block at " + start, e);
-			throw new IOException(e);
-		}
-
-	}
-
-	@Override
-	public long size() {
-		try {
-			RemoteVolumeInfo[] rv = this.getConnectedVolumes();
-			long sz = 0;
-			for (RemoteVolumeInfo r : rv) {
-				sz += r.data;
-			}
-			return sz;
-		} catch (Exception e) {
-			SDFSLogger.getLog().warn("unable to get clustered compressed size", e);
-		}
-		return HashBlobArchive.getLength();
-	}
-
-	@Override
-	public long writeChunk(byte[] hash, byte[] chunk, int len, String uuid) throws IOException {
-		try {
-			return HashBlobArchive.writeBlock(hash, chunk, uuid);
-		} catch (HashExistsException e) {
-			throw e;
-		} catch (Exception e) {
-			SDFSLogger.getLog().warn("error writing hash", e);
-			throw new IOException(e);
-		}
-	}
-
-	private ReentrantLock delLock = new ReentrantLock();
-	private int mdVersion;
-
-	@Override
-	public void deleteChunk(byte[] hash, long start, int len) throws IOException {
-		delLock.lock();
-		try {
-			// SDFSLogger.getLog().info("deleting " + del);
-			if (this.deletes.containsKey(start)) {
-				int sz = this.deletes.get(start) + 1;
-				this.deletes.put(start, sz);
-			} else
-				this.deletes.put(start, 1);
-
-		} catch (Exception e) {
-			SDFSLogger.getLog().error("error putting data", e);
-			throw new IOException(e);
-		} finally {
-			delLock.unlock();
-		}
-
-		/*
-		 * String hashString = this.encHashArchiveName(start,
-		 * Main.chunkStoreEncryptionEnabled); try { CloudBlockBlob blob =
-		 * container.getBlockBlobReference("blocks/" +hashString); HashMap metaData = blob.getMetadata(); int objs =
-		 * Integer.parseInt(metaData.get("objects")); objs--; if(objs <= 0) {
-		 * blob.delete(); blob = container.getBlockBlobReference("keys/" +hashString);
-		 * blob.delete(); }else { metaData.put("objects", Integer.toString(objs));
-		 * blob.setMetadata(metaData); blob.uploadMetadata(); } } catch (Exception e) {
-		 * SDFSLogger.getLog() .warn("Unable to delete object " + hashString, e); }
-		 * finally { //pool.returnObject(container); }
-		 */
-	}
-
-	/*
-	 * @SuppressWarnings("deprecation") private void resetCurrentSize() throws
-	 * IOException { PageSet bul = null; if
-	 * (this.atmosStore) bul = blobStore.list(this.name,
-	 * ListContainerOptions.Builder.inDirectory("bucketinfo/")); else
-	 * if(this.b2Store) bul = blobStore.list(this.name,
-	 * ListContainerOptions.Builder.prefix("bucketinfo/").maxResults(100)); else bul
-	 * = blobStore.list(this.name,
-	 * ListContainerOptions.Builder.prefix("bucketinfo/")); long rcs = 0; long rccs
-	 * = 0; String lbi = "bucketinfo/" + EncyptUtils.encHashArchiveName(Main.DSEID,
-	 * Main.chunkStoreEncryptionEnabled); for (StorageMetadata st : bul) { if
-	 * (!st.getName().equalsIgnoreCase(lbi)) { Map md =
-	 * this.getMetaData(lbi); try { rcs += Long.parseLong(md.get("currentlength"));
-	 * rccs += Long.parseLong(md.get("compressedlength")); } catch (Exception e) {
-	 * 
-	 * } } } this.rcurrentCompressedSize.set(rccs); this.rcurrentSize.set(rcs); }
-	 */
-
-	@Override
-	public void init(Element config) throws IOException {
-		SDFSLogger.getLog().info("Accessing CloudRaid Buckets");
-		try {
-			this.name = "cloudraid";
-			this.staged_sync_location.mkdirs();
-			this.ec_stage_location.mkdirs();
-
-			if (config.hasAttribute("block-size")) {
-				int sz = (int) StringUtils.parseSize(config.getAttribute("block-size"));
-				HashBlobArchive.MAX_LEN = sz;
-			}
-			if (config.hasAttribute("backlog-size")) {
-				if (config.getAttribute("backlog-size").equals("-1")) {
-					HashBlobArchive.maxQueueSize = -1;
-				} else if (!config.getAttribute("backlog-size").equals("0")) {
-					long bsz = StringUtils.parseSize(config.getAttribute("block-size"));
-					long qsz = StringUtils.parseSize(config.getAttribute("backlog-size"));
-					if (qsz > 0) {
-						long tsz = qsz / bsz;
-						HashBlobArchive.maxQueueSize = Math.toIntExact(tsz);
-					}
-				}
-			}
-			if (config.hasAttribute("sync-files")) {
-				boolean syncf = Boolean.parseBoolean(config.getAttribute("sync-files"));
-				if (syncf) {
-					new FileReplicationService(this);
-				}
-			}
-			if (config.hasAttribute("connection-check-interval")) {
-				this.checkInterval = Integer.parseInt(config.getAttribute("connection-check-interval"));
-			}
-			if (config.hasAttribute("delete-unclaimed")) {
-				this.deleteUnclaimed = Boolean.parseBoolean(config.getAttribute("delete-unclaimed"));
-			}
-			if (config.hasAttribute("upload-thread-sleep-time")) {
-				int tm = Integer.parseInt(config.getAttribute("upload-thread-sleep-time"));
-				HashBlobArchive.THREAD_SLEEP_TIME = tm;
-			} else {
-				HashBlobArchive.THREAD_SLEEP_TIME = 1000 * 60 * 10;
-			}
-			if (config.hasAttribute("single-writer")) {
-				HashBlobArchive.SINGLE_WRITER = Boolean.parseBoolean("singel-writer");
-			}
-			if (config.hasAttribute("local-cache-size")) {
-				long sz = StringUtils.parseSize(config.getAttribute("local-cache-size"));
-				HashBlobArchive.setLocalCacheSize(sz);
-			}
-			if (config.hasAttribute("metadata-version")) {
-				this.mdVersion = Integer.parseInt(config.getAttribute("metadata-version"));
-				SDFSLogger.getLog().info("Set Metadata Version to " + this.mdVersion);
-			}
-			if (config.hasAttribute("map-cache-size")) {
-				int sz = Integer.parseInt(config.getAttribute("map-cache-size"));
-				HashBlobArchive.MAP_CACHE_SIZE = sz;
-			}
-			if (config.hasAttribute("io-threads")) {
-				int sz = Integer.parseInt(config.getAttribute("io-threads"));
-				Main.dseIOThreads = sz;
-			}
-			int rsp = 0;
-			int wsp = 0;
-			if (config.hasAttribute("read-speed")) {
-				rsp = Integer.parseInt(config.getAttribute("read-speed"));
-			}
-			if (config.hasAttribute("write-speed")) {
-				wsp = Integer.parseInt(config.getAttribute("write-speed"));
-			}
-			if (config.hasAttribute("raid-level")) {
-				String _rl = config.getAttribute("raid-level");
-
-				if (_rl.equalsIgnoreCase("STRIPE"))
-					rl = RAID.STRIPE;
-				if (_rl.equalsIgnoreCase("MIRROR"))
-					rl = RAID.MIRROR;
-				if (_rl.equalsIgnoreCase("EC"))
-					rl = RAID.EC;
-				if (_rl.equalsIgnoreCase("CONCAT"))
-					rl = RAID.CONCAT;
-			}
-			if (rl.equals(RAID.EC)) {
-				ecn = Integer.parseInt(config.getAttribute("erasure-copies"));
-			}
-			SDFSLogger.getLog().info("Raid Level Set to " + rl.name());
-			NodeList pls = config.getElementsByTagName("pool");
-			if (pls.getLength() == 0) {
-				System.err.println("No Subpools found. Exiting");
-				System.exit(254);
-			} else {
-				for (int i = 0; i < pls.getLength(); i++) {
-					Element el = (Element) pls.item(i);
-					String chunkClass = el.getAttribute("chunkstore-class");
-					try {
-						AbstractChunkStore cl = (AbstractChunkStore) Class.forName(chunkClass).newInstance();
-						AbstractBatchStore bs = (AbstractBatchStore) cl;
-						bs.setStandAlone(false);
-						cl.init(el);
-						this.stores.add(cl);
-
-						if (el.hasAttribute("metadata-store")) {
-							boolean b = Boolean.parseBoolean(el.getAttribute("metadata-store"));
-							if (b) {
-								this.metapools.add(bs);
-							}
-						}
-						if (el.hasAttribute("data-store")) {
-							boolean b = Boolean.parseBoolean(el.getAttribute("data-store"));
-							if (b) {
-								byte pos = Byte.parseByte(el.getAttribute("raid-position"));
-								long capacity = -1;
-								if (el.hasAttribute("capacity")) {
-									capacity = StringUtils.parseSize(el.getAttribute("capacity"));
-								}
-								BucketStats bStat = new BucketStats(pos, capacity, 0, el.getAttribute("bucket-name"),
-										chunkClass);
-								this.datapools.add(pos, bs);
-								this.bucketSizes.add(pos, bStat);
-								this.sbl.add(new SimpleImmutableEntry(pos, bStat));
-							}
-						}
-
-					} catch (Exception e) {
-						SDFSLogger.getLog().warn(
-								"Unable to connect to subpool " + el.getAttribute("bucket-name") + " for " + chunkClass,
-								e);
-						boolean b = Boolean.parseBoolean(el.getAttribute("data-store"));
-						byte pos = Byte.parseByte(el.getAttribute("raid-position"));
-						if (b) {
-							this.datapools.add(pos, null);
-						}
-						long capacity = -1;
-						if (el.hasAttribute("capacity")) {
-							capacity = StringUtils.parseSize(el.getAttribute("capacity"));
-						}
-						BucketStats bStat = new BucketStats(pos, capacity, 0, el.getAttribute("bucket-name"),
-								chunkClass);
-						bStat.connected = false;
-						this.bucketSizes.add(pos, bStat);
-					}
-				}
-			}
-			if (rl.equals(RAID.EC)) {
-				if (this.datapools.size() < (this.datapools.size() - ecn)) {
-					System.err.println("Required subpools is " + (this.datapools.size() - ecn) + " total found was"
-							+ this.datapools.size());
-					System.exit(253);
-				} else
-					ecio = new ECIO(pls.getLength() - ecn, ecn);
-			}
-			if (this.metapools.size() == 0) {
-				System.err.println("No metadata subpools found");
-				System.exit(253);
-			}
-			this.partSize = Long.MAX_VALUE / this.datapools.size();
-			Map md = null;
-			long lastUpdated = 0;
-			for (AbstractBatchStore st : this.metapools) {
-				Map _md = st.getBucketInfo();
-				if (_md != null) {
-					try {
-						long tm = Long.parseLong(_md.get("lastupdated"));
-						if (tm > lastUpdated) {
-							lastUpdated = tm;
-							md = _md;
-						}
-					} catch (Exception e) {
-
-					}
-				}
-			}
-			if (md == null) {
-				md = new HashMap();
-			}
-			if (md.size() == 0)
-				this.clustered = true;
-			else if (md.containsKey("clustered"))
-				this.clustered = Boolean.parseBoolean(md.get("clustered"));
-			else
-				this.clustered = false;
-			md.put("clustered", Boolean.toString(clustered));
-			long sz = 0;
-			long cl = 0;
-			if (md.containsKey("currentlength")) {
-				sz = Long.parseLong(md.get("currentlength"));
-				if (sz < 0)
-					sz = 0;
-			}
-			if (md.containsKey("compressedlength")) {
-				cl = Long.parseLong(md.get("compressedlength"));
-				if (cl < 0)
-					cl = 0;
-			}
-			if (cl == 0 || sz == 0) {
-				md.put("currentlength", Long.toString(HashBlobArchive.getLength()));
-				md.put("compressedlength", Long.toString(HashBlobArchive.getCompressedLength()));
-				md.put("clustered", Boolean.toString(this.clustered));
-				md.put("hostname", InetAddress.getLocalHost().getHostName());
-				if (Main.volume != null) {
-					md.put("port", Integer.toString(Main.sdfsCliPort));
-				}
-				md.put("bucketversion", Integer.toString(version));
-				md.put("lastupdated", Long.toString(System.currentTimeMillis()));
-				md.put("sdfsversion", Main.version);
-				for (AbstractBatchStore st : this.metapools) {
-
-					st.updateBucketInfo(md);
-				}
-
-			} else {
-				md.put("lastupdated", Long.toString(System.currentTimeMillis()));
-				md.put("sdfsversion", Main.version);
-				for (AbstractBatchStore st : this.metapools) {
-					st.updateBucketInfo(md);
-				}
-			}
-			for (int i = 0; i < this.datapools.size(); i++) {
-				if (md.containsKey("subbucket.size." + i)) {
-					this.bucketSizes.get(i).usage.set(Long.parseLong(md.get("subbucket.size." + i)));
-					SDFSLogger.getLog().info("Set bucket size for " + i + " to " + md.get("subbucket.size." + i));
-				}
-			}
-			HashBlobArchive.setLength(sz);
-			HashBlobArchive.setCompressedLength(cl);
-			Thread thread = new Thread(this);
-			thread.start();
-			HashBlobArchive.init(this);
-			HashBlobArchive.setReadSpeed(rsp, false);
-			HashBlobArchive.setWriteSpeed(wsp, false);
-			cs = this;
-			// this.resetCurrentSize();
-		} catch (Exception e) {
-			throw new IOException(e);
-		} finally {
-			// if (pool != null)
-			// pool.returnObject(container);
-		}
-
-	}
-
-	@Override
-	public void iterationInit(boolean deep) throws IOException {
-		for (AbstractBatchStore b : this.datapools) {
-			AbstractChunkStore st = (AbstractChunkStore) b;
-			st.iterationInit(deep);
-		}
-		ht = null;
-		hid = 0;
-
-	}
-
-	@Override
-	public long getFreeBlocks() {
-		return 0;
-	}
-
-	private AbstractChunkStore ht = null;
-	private int hid = 0;
-
-	@Override
-	public synchronized ChunkData getNextChunck() throws IOException {
-		if (ht == null) {
-			if ((this.rl.equals(RAID.STRIPE) || this.rl.equals(RAID.CONCAT)) && hid >= this.datapools.size())
-				return null;
-			else if (this.rl.equals(RAID.MIRROR) && hid > 0) {
-				return null;
-			} else if (this.rl.equals(RAID.EC) && hid > 0) {
-				return null;
-			} else {
-				AbstractBatchStore b = this.datapools.get(hid);
-				ht = (AbstractChunkStore) b;
-				hid++;
-				return this.getNextChunck();
-			}
-		} else {
-			ChunkData cd = ht.getNextChunck();
-			if (cd == null) {
-				ht = null;
-				return null;
-			} else {
-				return cd;
-			}
-		}
-
-	}
-
-	@Override
-	public long maxSize() {
-		return Main.chunkStoreAllocationSize;
-	}
-
-	@Override
-	public long compressedSize() {
-		try {
-			RemoteVolumeInfo[] rv = this.getConnectedVolumes();
-			long sz = 0;
-			for (RemoteVolumeInfo r : rv) {
-				sz += r.compressed;
-			}
-			return sz;
-		} catch (Exception e) {
-			SDFSLogger.getLog().warn("unable to get clustered compressed size", e);
-		}
-		return HashBlobArchive.getCompressedLength();
-	}
-
-	@Override
-	public void deleteDuplicate(byte[] hash, long start, int len) throws IOException {
-		// TODO Auto-generated method stub
-
-	}
-
-	Random rnd = new Random();
-
-	private Entry getStore(long id) {
-		if (this.rl.equals(RAID.CONCAT)) {
-			ByteBuffer bf = ByteBuffer.allocate(8);
-			bf.putLong(id);
-			bf.flip();
-			byte pos = bf.get();
-			return new SimpleImmutableEntry(Integer.valueOf(pos), this.datapools.get(pos));
-		}
-		if (this.rl.equals(RAID.STRIPE)) {
-			if (id < 0) {
-				id = (id + 1) * -1;
-			}
-			int part = Math.toIntExact(id / this.partSize);
-			return new SimpleImmutableEntry(part, this.datapools.get(part));
-		} else {
-			AbstractBatchStore st = null;
-			int pos = 0;
-			while (st == null) {
-				pos = rnd.nextInt(this.datapools.size());
-				st = this.datapools.get(pos);
-			}
-			return new SimpleImmutableEntry(pos, st);
-		}
-	}
-
-	@Override
-	public boolean fileExists(long id) throws IOException {
-		try {
-			return this.getStore(id).getValue().fileExists(id);
-		} catch (Exception e) {
-			SDFSLogger.getLog().error("unable to get id", e);
-			throw new IOException(e);
-		}
-
-	}
-
-	ExecutorService uploadExecutor = Executors.newWorkStealingPool();
-
-	@Override
-	public void writeHashBlobArchive(HashBlobArchive arc, long id) throws IOException {
-
-		if (this.rl.equals(RAID.MIRROR)) {
-			ArrayList> ar = new ArrayList>();
-			for (AbstractBatchStore st : this.datapools) {
-				if (st == null)
-					throw new IOException("unable to write id=" + id + " because not all data pools are up");
-				Callable task = () -> {
-					try {
-						st.writeHashBlobArchive(arc, id);
-						return true;
-					} catch (IOException e1) {
-						SDFSLogger.getLog().warn("unable to write id=" + id, e1);
-						return false;
-					}
-				};
-				ar.add(task);
-			}
-			try {
-				final ArrayList al = new ArrayList();
-				uploadExecutor.invokeAll(ar).stream().forEach((k) -> {
-					try {
-						synchronized (al) {
-							al.add(k.get());
-						}
-
-					} catch (InterruptedException | ExecutionException e1) {
-						// TODO Auto-generated catch block
-						e1.printStackTrace();
-					}
-				});
-				for (Boolean bk : al) {
-					if (!bk)
-						throw new IOException("unable to get id=" + id);
-				}
-			} catch (InterruptedException e1) {
-				SDFSLogger.getLog().warn("unable to get id=" + id, e1);
-				throw new IOException(e1);
-			}
-
-		} else if (this.rl.equals(RAID.STRIPE) || this.rl.equals(RAID.CONCAT)) {
-			Entry st = this.getStore(id);
-			st.getValue().writeHashBlobArchive(arc, id);
-			this.bucketSizes.get(st.getKey()).usage.addAndGet(arc.getFile().length());
-		} else if (this.rl.equals(RAID.EC)) {
-			final HashMap metaData = new HashMap();
-			metaData.put("size", Integer.toString(arc.uncompressedLength.get()));
-			if (Main.compress) {
-				metaData.put("lz4compress", "true");
-			} else {
-				metaData.put("lz4compress", "false");
-			}
-			long csz = arc.getFile().length();
-			if (Main.chunkStoreEncryptionEnabled) {
-				metaData.put("encrypt", "true");
-			} else {
-				metaData.put("encrypt", "false");
-			}
-			metaData.put("compressedsize", Long.toString(csz));
-			metaData.put("bsize", Integer.toString(arc.uncompressedLength.get()));
-			metaData.put("objects", Integer.toString(arc.getSz()));
-			File[] fls = ecio.encode(arc.getFile(), this.ec_stage_location);
-			ArrayList> ar = new ArrayList>();
-			for (int i = 0; i < datapools.size(); i++) {
-				final int z = i;
-				AbstractCloudFileSync st = (AbstractCloudFileSync) datapools.get(i);
-				if (st == null) {
-					throw new IOException("unable to write id=" + id + " because not all data pools are up");
-				}
-				Callable task = () -> {
-					try {
-						HashMap nmet = new HashMap(metaData);
-						nmet.put("shardsize", Long.toString(fls[z].length()));
-						st.uploadFile(fls[z], Long.toString(id), "blocks", nmet, true);
-						this.bucketSizes.get(z).usage.addAndGet(fls[z].length());
-						return true;
-					} catch (Exception e) {
-						SDFSLogger.getLog().warn("unable to write blocks " + id, e);
-						return false;
-					}
-				};
-				ar.add(task);
-			}
-			final ArrayList al = new ArrayList();
-			try {
-				uploadExecutor.invokeAll(ar).stream().forEach((k) -> {
-					try {
-						synchronized (al) {
-							al.add(k.get());
-						}
-
-					} catch (InterruptedException | ExecutionException e1) {
-						SDFSLogger.getLog().warn("unable to write blocks " + id, e1);
-					}
-				});
-			} catch (InterruptedException e) {
-				SDFSLogger.getLog().warn("unable to write blocks " + id, e);
-				throw new IOException(e);
-			}
-			try {
-				for (Boolean bk : al) {
-					if (!bk)
-						throw new IOException("unable to write id=" + id);
-				}
-			} finally {
-				for (File f : fls) {
-					f.delete();
-				}
-			}
-
-			byte[] hs = arc.getHashesString().getBytes();
-			File f = new File(this.ec_stage_location, id + ".hashes");
-			FileOutputStream out = new FileOutputStream(f, false);
-			out.write(hs);
-			out.flush();
-			out.close();
-			int sz = hs.length;
-			if (Main.compress) {
-				hs = CompressionUtils.compressLz4(hs);
-			}
-			byte[] ivb = PassPhrase.getByteIV();
-			if (Main.chunkStoreEncryptionEnabled) {
-				hs = EncryptUtils.encryptCBC(hs, new IvParameterSpec(ivb));
-			}
-			final HashMap _metaData = new HashMap();
-			_metaData.put("size", Integer.toString(sz));
-			_metaData.put("ivspec", BaseEncoding.base64().encode(ivb));
-			_metaData.put("lastaccessed", "0");
-			_metaData.put("lz4compress", "false");
-			_metaData.put("encrypt", Boolean.toString(Main.chunkStoreEncryptionEnabled));
-			_metaData.put("compressedsize", Long.toString(arc.getFile().length()));
-			_metaData.put("bsize", Integer.toString(arc.uncompressedLength.get()));
-			_metaData.put("bcompressedsize", Long.toString(arc.getFile().length()));
-			_metaData.put("objects", Integer.toString(arc.getSz()));
-			ar = new ArrayList>();
-			for (int i = 0; i < ecn; i++) {
-				final int z = i;
-				AbstractCloudFileSync st = (AbstractCloudFileSync) datapools.get(i);
-				Callable task = () -> {
-					try {
-						st.uploadFile(f, Long.toString(id), "keys", new HashMap(_metaData), true);
-						this.bucketSizes.get(z).usage.addAndGet(f.length());
-						return true;
-					} catch (IOException e) {
-						SDFSLogger.getLog().warn("unable to write blocks " + id, e);
-						return false;
-					}
-				};
-				ar.add(task);
-			}
-			al.clear();
-			try {
-				uploadExecutor.invokeAll(ar).stream().forEach((k) -> {
-					try {
-						synchronized (al) {
-							al.add(k.get());
-						}
-
-					} catch (InterruptedException | ExecutionException e1) {
-						SDFSLogger.getLog().warn("unable to write blocks " + id, e1);
-					}
-				});
-			} catch (InterruptedException e) {
-				SDFSLogger.getLog().warn("unable to write blocks " + id, e);
-			}
-			try {
-				for (Boolean bk : al) {
-					if (!bk)
-						throw new IOException("unable to write id=" + id);
-				}
-			} finally {
-				f.delete();
-			}
-
-		}
-	}
-
-	@Override
-	public void getBytes(long id, File f) throws IOException {
-		try {
-			if (rl.equals(RAID.MIRROR) || rl.equals(RAID.STRIPE) || rl.equals(RAID.CONCAT)) {
-				this.getStore(id).getValue().getBytes(id, f);
-			} else if (rl.equals(RAID.EC)) {
-				ArrayList> ar = new ArrayList>();
-				File[] zk = new File[this.datapools.size()];
-				ArrayList ear = new ArrayList();
-				for (int i = 0; i < (this.datapools.size() - ecn); i++) {
-					final int z = i;
-					AbstractBatchStore st = datapools.get(z);
-					if (st == null) {
-						zk[z] = null;
-						SDFSLogger.getLog().warn("unable to return " + id + " for data pool " + z);
-						ear.add(z);
-					} else {
-						Callable task = () -> {
-							try {
-								File _f = new File(this.ec_stage_location, id + "." + z);
-								SDFSLogger.getLog().info("will write to " + _f.getPath());
-								st.getBytes(id, _f);
-								zk[z] = _f;
-								return _f;
-							} catch (Exception e1) {
-								zk[z] = null;
-								SDFSLogger.getLog().warn("unable to return " + id, e1);
-								ear.add(z);
-								return null;
-							}
-						};
-						ar.add(task);
-					}
-				}
-				uploadExecutor.invokeAll(ar);
-				if (ear.size() > 0) {
-					if (ear.size() > ecn) {
-						throw new IOException(
-								"Unable to restore data ec level=" + ecn + " ,missing blocks=" + ear.size());
-					} else {
-						final ArrayList fal = new ArrayList();
-						for (int i = this.datapools.size() - ecn; i < (this.datapools.size()); i++) {
-							AbstractBatchStore st = datapools.get(i);
-							final int z = i;
-							Callable task = () -> {
-								try {
-									File _f = new File(this.ec_stage_location, id + "." + z);
-									st.getBytes(id, _f);
-									zk[z] = _f;
-									fal.add(_f);
-									return _f;
-								} catch (Exception e1) {
-									SDFSLogger.getLog().warn("unable to return " + id, e1);
-									zk[z] = null;
-									return null;
-								}
-							};
-							ar.add(task);
-						}
-						uploadExecutor.invokeAll(ar);
-						if (fal.size() < ear.size()) {
-							throw new IOException("Unable to restore data ec blocks read=" + fal.size()
-									+ " ,missing blocks=" + ear.size());
-						} else {
-							ecio.decode(zk, f);
-						}
-					}
-				} else {
-					ecio.decode(zk, f);
-				}
-			}
-		} catch (Exception e) {
-			SDFSLogger.getLog().error("unable to fetch block [" + id + "]", e);
-			throw new IOException(e);
-		} finally {
-			// pool.returnObject(container);
-		}
-	}
-
-	@Override
-	public void clearCounters() {
-		HashBlobArchive.setCompressedLength(0);
-		HashBlobArchive.setLength(0);
-	}
-
-	private void setBucketMetaData() throws IOException {
-		Map md = null;
-		for (AbstractBatchStore cst : this.metapools) {
-			try {
-				md = cst.getBucketInfo();
-				break;
-			} catch (Exception e) {
-				SDFSLogger.getLog().error("bucket info error", e);
-			}
-		}
-		md.put("currentlength", Long.toString(HashBlobArchive.getLength()));
-		md.put("compressedlength", Long.toString(HashBlobArchive.getCompressedLength()));
-		md.put("clustered", Boolean.toString(this.clustered));
-		md.put("hostname", InetAddress.getLocalHost().getHostName());
-		md.put("lastupdated", Long.toString(System.currentTimeMillis()));
-		md.put("bucketversion", Integer.toString(version));
-		md.put("sdfsversion", Main.version);
-		for (int i = 0; i < this.bucketSizes.size(); i++) {
-			md.put("subbucket.size." + i, Long.toString(this.bucketSizes.get(i).usage.get()));
-		}
-
-		if (Main.volume != null) {
-			md.put("port", Integer.toString(Main.sdfsCliPort));
-		}
-		final HashMap _md = new HashMap();
-		_md.putAll(md);
-		ArrayList> al = new ArrayList>();
-		for (AbstractBatchStore st : this.metapools) {
-			if (st != null) {
-				Callable task = () -> {
-					try {
-						st.updateBucketInfo(_md);
-						return true;
-					} catch (Exception e) {
-						SDFSLogger.getLog().error("error in thread", e);
-						return false;
-					}
-				};
-				al.add(task);
-			}
-		}
-		try {
-			uploadExecutor.invokeAll(al);
-		} catch (InterruptedException e) {
-			throw new IOException(e);
-		}
-	}
-
-	@Override
-	public void run() {
-		while (!closed) {
-			try {
-				Thread.sleep(60000);
-				try {
-
-					this.setBucketMetaData();
-
-					// this.resetCurrentSize();
-				} catch (Exception e) {
-					SDFSLogger.getLog().error("unable to update size", e);
-				}
-				if (this.deletes.size() > 0) {
-					SDFSLogger.getLog().debug("running garbage collection for " + this.deletes.size());
-					this.delLock.lock();
-
-					HashMap odel = null;
-					try {
-						odel = this.deletes;
-						this.deletes = new HashMap();
-						// SDFSLogger.getLog().info("delete hash table size of "
-						// + odel.size());
-					} finally {
-						this.delLock.unlock();
-					}
-					Set iter = odel.keySet();
-					BlockingQueue worksQueue = new SynchronousQueue();
-					ThreadPoolExecutor executor = new ThreadPoolExecutor(1, Main.dseIOThreads, 10, TimeUnit.SECONDS,
-							worksQueue, new ThreadPoolExecutor.CallerRunsPolicy());
-					for (Long k : iter) {
-
-						String hashString = EncyptUtils.encHashArchiveName(k.longValue(),
-								Main.chunkStoreEncryptionEnabled);
-						try {
-
-							DeleteObject obj = new DeleteObject(k.longValue(), this);
-							executor.execute(obj);
-
-						} catch (Exception e) {
-							delLock.lock();
-							try {
-								// SDFSLogger.getLog().info("deleting " + del);
-								if (this.deletes.containsKey(k)) {
-									int sz = this.deletes.get(k) + odel.get(k);
-									this.deletes.put(k, sz);
-								} else
-									this.deletes.put(k, odel.get(k));
-
-							} finally {
-								delLock.unlock();
-							}
-							SDFSLogger.getLog().warn("Unable to delete object " + hashString, e);
-						} finally {
-							// pool.returnObject(container);
-						}
-					}
-					executor.shutdown();
-					while (!executor.awaitTermination(10, TimeUnit.SECONDS)) {
-						SDFSLogger.getLog().debug("Awaiting deletion task completion of threads.");
-					}
-					SDFSLogger.getLog().info("done running garbage collection");
-
-				}
-			} catch (InterruptedException e) {
-				break;
-			} catch (Exception e) {
-				SDFSLogger.getLog().error("error in delete thread", e);
-			}
-		}
-	}
-
-	@Override
-	public void sync() throws IOException {
-		HashBlobArchive.sync();
-
-	}
-
-	@Override
-	public void uploadFile(File f, String to, String pp, HashMap md, boolean disableComp)
-			throws IOException {
-		ArrayList> ar = new ArrayList>();
-		for (AbstractBatchStore st : this.metapools) {
-			AbstractCloudFileSync cst = (AbstractCloudFileSync) st;
-			Callable task = () -> {
-				try {
-					cst.uploadFile(f, to, pp, md, disableComp);
-					return true;
-				} catch (Exception e) {
-					SDFSLogger.getLog().error("error in uploadFile thread", e);
-					return false;
-				}
-			};
-			ar.add(task);
-		}
-		try {
-			uploadExecutor.invokeAll(ar).stream().forEachOrdered((k) -> {
-				try {
-					k.get();
-				} catch (Exception e1) {
-					SDFSLogger.getLog().error("error in uploadFile thread", e1);
-				}
-			});
-		} catch (InterruptedException e) {
-			throw new IOException(e);
-		}
-
-	}
-
-	@Override
-	public void downloadFile(String nm, File to, String pp) throws IOException {
-		if (to.exists())
-			throw new IOException("file " + to.getPath() + " exists");
-		IOException e = null;
-		for (AbstractBatchStore st : this.metapools) {
-			try {
-				AbstractCloudFileSync cst = (AbstractCloudFileSync) st;
-				cst.downloadFile(nm, to, pp);
-				return;
-			} catch (IOException e1) {
-				e = e1;
-			}
-		}
-		if (e != null)
-			throw e;
-
-	}
-
-	@Override
-	public void deleteFile(String nm, String pp) throws IOException {
-		while (nm.startsWith(File.separator))
-			nm = nm.substring(1);
-		final String _nm = nm;
-		try {
-			ArrayList> ar = new ArrayList>();
-			for (AbstractBatchStore st : this.metapools) {
-				AbstractCloudFileSync cst = (AbstractCloudFileSync) st;
-				Callable task = () -> {
-					try {
-						cst.deleteFile(_nm, pp);
-						return true;
-					} catch (Exception e) {
-						SDFSLogger.getLog().error("error in deleteFile thread", e);
-						return false;
-					}
-				};
-				ar.add(task);
-			}
-			uploadExecutor.invokeAll(ar);
-		} catch (Exception e) {
-			throw new IOException(e);
-		}
-	}
-
-	@Override
-	public void renameFile(String from, String to, String pp) throws IOException {
-
-	}
-
-	public void clearIter() {
-		AbstractCloudFileSync cst = (AbstractCloudFileSync) this.metapools.get(0);
-		cst.clearIter();
-	}
-
-	public String getNextName(String pp, long id) throws IOException {
-		AbstractCloudFileSync cst = (AbstractCloudFileSync) this.metapools.get(0);
-		return cst.getNextName(pp, id);
-	}
-
-	public Map getHashMap(long id) throws IOException {
-		IOException e = null;
-		if (rl.equals(RAID.STRIPE) || rl.equals(RAID.CONCAT)) {
-			return this.getStore(id).getValue().getHashMap(id);
-		}
-		for (AbstractBatchStore st : this.datapools) {
-			if (st != null) {
-				try {
-					Map hm = st.getHashMap(id);
-					if (hm != null) {
-						return hm;
-					}
-				} catch (Exception e1) {
-					e = new IOException(e1);
-				}
-			}
-		}
-		if (e != null)
-			throw e;
-		return null;
-	}
-
-	@Override
-	public boolean checkAccess() {
-		int alstatus = 0;
-		for (int i = 0; i < datapools.size(); i++) {
-			AbstractBatchStore st = this.datapools.get(i);
-			if (st != null && st.checkAccess()) {
-				this.bucketSizes.get(i).connected = true;
-				alstatus++;
-			} else {
-				this.bucketSizes.get(i).connected = false;
-				SDFSLogger.getLog().warn("unable to connect to bucket " + i);
-			}
-		}
-		if (alstatus < this.datapools.size())
-			return false;
-		else
-			return true;
-	}
-
-	@Override
-	public void setReadSpeed(int kbps) {
-		HashBlobArchive.setReadSpeed((double) kbps, true);
-
-	}
-
-	@Override
-	public void setWriteSpeed(int kbps) {
-		HashBlobArchive.setWriteSpeed((double) kbps, true);
-
-	}
-
-	@Override
-	public void setCacheSize(long sz) throws IOException {
-		HashBlobArchive.setCacheSize(sz, true);
-
-	}
-
-	@Override
-	public int getReadSpeed() {
-		return (int) HashBlobArchive.getReadSpeed();
-	}
-
-	@Override
-	public int getWriteSpeed() {
-		return (int) HashBlobArchive.getWriteSpeed();
-	}
-
-	@Override
-	public long getCacheSize() {
-		return HashBlobArchive.getCacheSize();
-	}
-
-	@Override
-	public long getMaxCacheSize() {
-		return HashBlobArchive.getLocalCacheSize();
-	}
-
-	@Override
-	public String restoreBlock(long id, byte[] hash) {
-		return null;
-
-	}
-
-	@Override
-	public boolean blockRestored(String id) {
-		// TODO Auto-generated method stub
-		return true;
-	}
-
-	@Override
-	public boolean checkAccess(String username, String password, Properties props) throws Exception {
-		return true;
-	}
-
-	@Override
-	public void deleteStore() {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void compact() {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public Iterator getNextObjectList(String prefix) throws IOException {
-		return null;
-	}
-
-	@Override
-	public StringResult getStringResult(String key) throws IOException, InterruptedException {
-		return null;
-	}
-
-	@Override
-	public boolean isLocalData() {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	@Override
-	public void checkoutObject(long id, int claims) throws IOException {
-		if (rl.equals(RAID.STRIPE) || rl.equals(RAID.CONCAT)) {
-			this.getStore(id).getValue().checkoutObject(id, claims);
-		} else {
-			ArrayList> al = new ArrayList>();
-			for (AbstractBatchStore st : this.datapools) {
-				Callable task = () -> {
-					try {
-						st.checkoutObject(id, claims);
-						return true;
-					} catch (Exception e) {
-						SDFSLogger.getLog().error("error in deleteFile thread", e);
-						return false;
-					}
-				};
-				al.add(task);
-			}
-			try {
-				final ArrayList ar = new ArrayList();
-				uploadExecutor.invokeAll(al).stream().forEach((k) -> {
-					synchronized (ar) {
-						try {
-							ar.add(k.get());
-						} catch (InterruptedException | ExecutionException e) {
-							ar.add(false);
-						}
-					}
-				});
-				for (Boolean b : ar) {
-					if (!b) {
-						throw new IOException("unable to checkout object " + id);
-					}
-				}
-			} catch (InterruptedException e) {
-				throw new IOException(e);
-			}
-		}
-
-	}
-
-	@Override
-	public boolean objectClaimed(String key) throws IOException {
-		return true;
-
-	}
-
-	@Override
-	public void checkoutFile(String name) throws IOException {
-		ArrayList> al = new ArrayList>();
-		for (AbstractBatchStore st : this.metapools) {
-			AbstractCloudFileSync cst = (AbstractCloudFileSync) st;
-			Callable task = () -> {
-				try {
-					cst.checkoutFile(name);
-					return true;
-				} catch (Exception e) {
-					SDFSLogger.getLog().error("error in deleteFile thread", e);
-					return false;
-				}
-			};
-			al.add(task);
-		}
-		try {
-			final ArrayList ar = new ArrayList();
-			uploadExecutor.invokeAll(al).stream().forEach((k) -> {
-				synchronized (ar) {
-					try {
-						ar.add(k.get());
-					} catch (InterruptedException | ExecutionException e) {
-						ar.add(false);
-					}
-				}
-			});
-			for (Boolean b : ar) {
-				if (!b) {
-					throw new IOException("unable to checkout object " + name);
-				}
-			}
-		} catch (InterruptedException e) {
-			throw new IOException(e);
-		}
-
-	}
-
-	@Override
-	public boolean isCheckedOut(String name, long volumeID) throws IOException {
-		ArrayList> al = new ArrayList>();
-		for (AbstractBatchStore st : this.metapools) {
-			AbstractCloudFileSync cst = (AbstractCloudFileSync) st;
-			Callable task = () -> {
-				try {
-					return cst.isCheckedOut(name, volumeID);
-				} catch (Exception e) {
-					SDFSLogger.getLog().error("error in isCheckedOut thread", e);
-					return false;
-				}
-			};
-			al.add(task);
-		}
-		try {
-			final ArrayList ar = new ArrayList();
-			uploadExecutor.invokeAll(al).stream().forEach((k) -> {
-				synchronized (ar) {
-					try {
-						ar.add(k.get());
-					} catch (InterruptedException | ExecutionException e) {
-						SDFSLogger.getLog().error("error in isCheckedOut thread", e);
-						ar.add(false);
-					}
-				}
-			});
-			for (Boolean b : ar) {
-				if (!b) {
-					return false;
-				}
-			}
-		} catch (InterruptedException e) {
-			throw new IOException(e);
-		}
-		return true;
-	}
-
-	@Override
-	public int getCheckInterval() {
-		return this.checkInterval;
-	}
-
-	@Override
-	public boolean isClustered() {
-		// TODO Auto-generated method stub
-		return this.clustered;
-	}
-
-	@Override
-	public RemoteVolumeInfo[] getConnectedVolumes() throws IOException {
-		AbstractCloudFileSync cst = (AbstractCloudFileSync) this.metapools.get(0);
-		RemoteVolumeInfo[] rc = cst.getConnectedVolumes();
-		SDFSLogger.getLog().info("connected volume size=" + rc.length);
-		return rc;
-	}
-
-	@Override
-	public byte[] getBytes(long id, int from, int to) throws IOException, DataArchivedException {
-		throw new IOException("funtion not supported");
-	}
-
-	@Override
-	public int getMetaDataVersion() {
-		// TODO Auto-generated method stub
-		return 0;
-	}
-
-	@Override
-	public void removeVolume(long volumeID) throws IOException {
-
-	}
-
-	private static class DeleteObject implements Runnable {
-		long id;
-		CloudRaidStore st;
-
-		private DeleteObject(long id, CloudRaidStore cloudRaidStore) {
-			this.id = id;
-			this.st = cloudRaidStore;
-		}
-
-		@Override
-		public void run() {
-			int tries = 0;
-			Exception e1 = null;
-			for (;;) {
-				try {
-					st.verifyDelete(id);
-					HashBlobArchive.removeLocalArchive(id);
-					e1 = null;
-					break;
-				} catch (Exception e) {
-					e1 = e;
-					if (tries > 6)
-						break;
-					else
-						tries++;
-				}
-
-			}
-			if (e1 != null) {
-				SDFSLogger.getLog().warn("unable to delete object " + id, e1);
-			}
-
-		}
-
-	}
-
-	@Override
-	public void timeStampData(long key) throws IOException {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void addRefresh(long id) {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void setDseSize(long sz) {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void setCredentials(String accessKey, String secretKey) {
-
-	}
-
-	@Override
-	public boolean isStandAlone() {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	@Override
-	public void setStandAlone(boolean standAlone) {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void setMetaStore(boolean metaStore) {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public boolean isMetaStore(boolean metaStore) {
-		// TODO Auto-generated method stub
-		return false;
-	}
-
-	@Override
-	public Map getUserMetaData(String name) throws IOException {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-	@Override
-	public Map getBucketInfo() {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-	@Override
-	public void updateBucketInfo(Map md) throws IOException {
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public int verifyDelete(long id) throws IOException {
-		if (rl.equals(RAID.STRIPE) || rl.equals(RAID.CONCAT)) {
-			String haName = EncyptUtils.encHashArchiveName(id, Main.chunkStoreEncryptionEnabled);
-			Entry ent = this.getStore(id);
-			Map md = ent.getValue().getUserMetaData("blocks/" + haName);
-			long csz = 0;
-			if (md.containsKey("compressedsize")) {
-				csz = Long.parseLong(md.get("compressedsize"));
-
-			}
-			int claims = ent.getValue().verifyDelete(id);
-			if (claims == 0)
-				this.bucketSizes.get(ent.getKey()).usage.addAndGet(-1 * csz);
-			return claims;
-		} else {
-			String haName = EncyptUtils.encHashArchiveName(id, Main.chunkStoreEncryptionEnabled);
-
-			int claims = 0;
-			Map data = this.getHashMap(id);
-			for (String key : data.keySet()) {
-				byte[] b = BaseEncoding.base64().decode(key);
-				if (HCServiceProxy.getHashesMap().mightContainKey(b, id))
-					claims++;
-			}
-			if (claims == 0) {
-				ArrayList> ar = new ArrayList>();
-				for (int i = 0; i < datapools.size(); i++) {
-					final int z = i;
-					final int _ecn = this.ecn;
-
-					if (datapools.get(i) == null) {
-						throw new IOException("unable to write id=" + id + " because not all data pools are up");
-					}
-					Callable task = () -> {
-						try {
-							AbstractCloudFileSync st = (AbstractCloudFileSync) datapools.get(z);
-
-							Map md = datapools.get(z).getUserMetaData("blocks/" + haName);
-							long csz = 0;
-							if (md.containsKey("compressedsize")) {
-								csz = Long.parseLong(md.get("compressedsize"));
-							}
-							if (md.containsKey("shardsize")) {
-								csz = Long.parseLong(md.get("shardsize"));
-							}
-
-							st.deleteFile(Long.toString(id), "blocks");
-							this.bucketSizes.get(z).usage.addAndGet(-1 * csz);
-							if (rl.equals(RAID.MIRROR) || z < _ecn)
-								st.deleteFile(Long.toString(id), "keys");
-							return true;
-						} catch (Exception e) {
-							SDFSLogger.getLog().warn("unable to delete block " + id, e);
-							return false;
-						}
-					};
-					ar.add(task);
-				}
-				try {
-					final ArrayList al = new ArrayList();
-					uploadExecutor.invokeAll(ar).stream().forEach((k) -> {
-						try {
-							synchronized (al) {
-								al.add(k.get());
-							}
-
-						} catch (InterruptedException | ExecutionException e1) {
-							// TODO Auto-generated catch block
-							e1.printStackTrace();
-						}
-					});
-					for (Boolean bk : al) {
-						if (!bk)
-							throw new IOException("unable to delete id=" + id);
-					}
-				} catch (InterruptedException e1) {
-					SDFSLogger.getLog().warn("unable to delete id=" + id, e1);
-					throw new IOException(e1);
-				}
-
-			}
-			return claims;
-		}
-
-	}
-
-	Random rand = new Random();
-
-	private long getLongID() throws IOException {
-		byte bid = -1;
-		if (rl.equals(RAID.CONCAT)) {
-			for (int i = 0; i < this.sbl.size(); i++) {
-				if (this.sbl.getAL().get(i).getValue().connected) {
-					bid = this.sbl.getAL().get(i).getKey();
-					break;
-				}
-			}
-		}
-		if (bid == -1) {
-			throw new IOException("no buckets available");
-		}
-		byte[] k = new byte[7];
-		rand.nextBytes(k);
-		ByteBuffer bk = ByteBuffer.allocate(8);
-		bk.put(bid);
-		bk.put(k);
-		bk.position(0);
-		return bk.getLong();
-	}
-
-	public static List getBucketSizes() {
-		return cs.bucketSizes;
-	}
-
-	@Override
-	public long getNewArchiveID() throws IOException {
-
-		long pid = this.getLongID();
-		while (pid < 100 && this.fileExists(pid))
-			pid = this.getLongID();
-		return pid;
-	}
-
-	public static class BucketStats {
-		public byte id;
-		public AtomicLong capacity;
-		public AtomicLong usage;
-		public String bucketName;
-		public String bucketClass;
-		public boolean connected = true;
-
-		public BucketStats(byte id, long capacity, long usage, String bucketName, String bucketClass) {
-			this.id = id;
-			if (capacity < 0) {
-				this.capacity = new AtomicLong(Long.MAX_VALUE);
-			} else {
-				this.capacity = new AtomicLong(capacity);
-			}
-			this.usage = new AtomicLong(usage);
-			this.bucketName = bucketName;
-			this.bucketClass = bucketClass;
-		}
-
-		public boolean isConnected() {
-			return this.connected;
-		}
-
-		public long getAvail() {
-			if (capacity == null) {
-				return Long.MAX_VALUE - usage.get();
-			} else
-				return capacity.get() - usage.get();
-		}
-	}
-
-	@Override
-	public boolean exists(String nm, String pp) throws IOException {
-		AbstractCloudFileSync cst = (AbstractCloudFileSync) this.metapools.get(0);
-		return cst.exists(nm, pp);
-
-	}
-
-	@Override
-	public long getAllObjSummary(String pp, long id) throws IOException {
-		// TODO Auto-generated method stub
-		return 0;
-	}
-
-	@Override
-	public String[] listFiles(String prefix, int length, String marker) throws IOException {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-	@Override
-	public FileInfoResponse getAttr(String name) throws NullPointerException, IOException {
-		// TODO Auto-generated method stub
-		return null;
-	}
-
-}
diff --git a/src/org/opendedup/sdfs/filestore/cloud/FileReplicationService.java b/src/org/opendedup/sdfs/filestore/cloud/FileReplicationService.java
index 7728edeb0..02e1df294 100644
--- a/src/org/opendedup/sdfs/filestore/cloud/FileReplicationService.java
+++ b/src/org/opendedup/sdfs/filestore/cloud/FileReplicationService.java
@@ -223,8 +223,8 @@ private void removeLock(String st) {
 					l.unlock();
 			}
 		} finally {
-			if (SDFSLogger.isDebug())
-				SDFSLogger.getLog().debug("hmpa size=" + this.activeTasks.size());
+
+			SDFSLogger.getLog().debug("hmpa size=" + this.activeTasks.size());
 			iLock.unlock();
 		}
 	}
@@ -243,19 +243,19 @@ public void metaFileDeleted(MFileDeleted evt) throws IOException {
 	}
 	/*
 	 * @Subscribe
-	 * 
+	 *
 	 * @AllowConcurrentEvents public void metaFileRenamed(MFileRenamed evt) {
-	 * 
+	 *
 	 * try { ReentrantLock l = this.getLock(evt.mf.getPath()); l.lock(); int tries =
-	 * 0; boolean done = false; while (!done) { try { if (SDFSLogger.isDebug())
+	 * 0; boolean done = false; while (!done) { try {
 	 * SDFSLogger.getLog().debug("renm " + evt.mf.getPath());
-	 * 
+	 *
 	 * this.sync.renameFile("files/" + evt.from.substring(pl), evt.to.substring(pl),
 	 * "files"); done = true; } catch (Exception e) { if (tries > maxTries) throw e;
 	 * else tries++; } } } catch (Exception e) {
 	 * SDFSLogger.getLog().error("unable to rename " + evt.mf.getPath(), e); }
 	 * finally { removeLock(evt.mf.getPath()); }
-	 * 
+	 *
 	 * }
 	 */
 
@@ -286,8 +286,8 @@ public void deleteFile(File f) throws IOException {
 			boolean done = false;
 			while (!done) {
 				try {
-					if (SDFSLogger.isDebug())
-						SDFSLogger.getLog().debug("delm " + f.getPath());
+
+					SDFSLogger.getLog().debug("delm " + f.getPath());
 					String fn = f.getPath().substring(pl);
 					if (!isSymlink && f.isDirectory())
 						fn = fn + DM;
@@ -335,11 +335,11 @@ public void metaFileWritten(MFileWritten evt) throws IOException {
 									evt.mf.writeLock.unlock();
 								}
 								eventUploadBus.post(evt);
-								
+
 							}
 						} else {
-							if (SDFSLogger.isDebug())
-								SDFSLogger.getLog().debug("nowritem " + evt.mf.getPath());
+
+							SDFSLogger.getLog().debug("nowritem " + evt.mf.getPath());
 						}
 						done = true;
 					} catch (Exception e) {
@@ -418,7 +418,7 @@ public void sFileWritten(SFileWritten evt) {
 				while (!done) {
 					try {
 						if (evt.sf.isDirty()) {
-							SDFSLogger.getLog().debug("writed " + evt.sf.getDatabasePath().substring(sl));
+							SDFSLogger.getLog().debug("written " + evt.sf.getDatabasePath().substring(sl));
 							this.sync.uploadFile(new File(evt.sf.getDatabasePath()),
 									evt.sf.getDatabasePath().substring(sl), "ddb", new HashMap(),
 									false);
@@ -468,8 +468,8 @@ public void sFileSync(SFileSync evt) {
 					boolean done = false;
 					while (!done) {
 						try {
-							if (SDFSLogger.isDebug())
-								SDFSLogger.getLog().debug("writed " + evt.sf.getPath());
+
+							SDFSLogger.getLog().debug("writed " + evt.sf.getPath());
 							this.sync.uploadFile(evt.sf, evt.sf.getPath().substring(sl), "ddb",
 									new HashMap(), false);
 
@@ -506,8 +506,8 @@ public void metaFileSync(MFileSync evt) {
 				boolean done = false;
 				while (!done) {
 					try {
-						if (SDFSLogger.isDebug())
-							SDFSLogger.getLog().debug("writem " + evt.mf.getPath());
+
+						SDFSLogger.getLog().debug("writem " + evt.mf.getPath());
 						this.sync.uploadFile(new File(evt.mf.getPath()), evt.mf.getPath().substring(pl), "files",
 								new HashMap(), false);
 						done = true;
@@ -540,8 +540,8 @@ public void sFileDeleted(SFileDeleted evt) {
 			boolean done = false;
 			while (!done) {
 				try {
-					if (SDFSLogger.isDebug())
-						SDFSLogger.getLog().debug("dels " + evt.sfp);
+
+					SDFSLogger.getLog().debug("dels " + evt.sfp);
 					SDFSLogger.getLog().debug("dels " + evt.sfp);
 					this.sync.deleteFile(evt.sfp.substring(sl), "ddb");
 					done = true;
@@ -573,8 +573,8 @@ public void volumeWritten(VolumeWritten evt) {
 			boolean done = false;
 			while (!done) {
 				try {
-					if (SDFSLogger.isDebug())
-						SDFSLogger.getLog().debug("writev " + evt.vol.getConfigPath());
+
+					SDFSLogger.getLog().debug("writev " + evt.vol.getConfigPath());
 					this.sync.uploadFile(new File(evt.vol.getConfigPath()), new File(evt.vol.getConfigPath()).getName(),
 							"volume", new HashMap(), false);
 					done = true;
@@ -640,7 +640,7 @@ public void downloadAll(CloudSyncDLRequest req) {
 				SDFSLogger.getLog().info("Metadata Files downloaded : " + MetaFileDownloader.fdl.get());
 				SDFSLogger.getLog().info("Metadata File download errors: " + MetaFileDownloader.fer.get());
 				this.sync.clearIter();
-				Main.syncDL = false;
+				//Main.syncDL = false;
 				Main.syncDLAll = false;
 
 				if (MetaFileDownloader.downloadSyncException != null) {
@@ -651,7 +651,7 @@ public void downloadAll(CloudSyncDLRequest req) {
 
 			} catch (Exception e) {
 				req.getEvent().endEvent("Error Occured During Sync Please Check Logs",
-							org.opendedup.sdfs.notification.SDFSEvent.ERROR);
+						org.opendedup.sdfs.notification.SDFSEvent.ERROR);
 				SDFSLogger.getLog().error("unable to sync", e);
 
 			}
diff --git a/src/org/opendedup/sdfs/filestore/cloud/SortedBucketList.java b/src/org/opendedup/sdfs/filestore/cloud/SortedBucketList.java
deleted file mode 100644
index b787621b7..000000000
--- a/src/org/opendedup/sdfs/filestore/cloud/SortedBucketList.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*******************************************************************************
- * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com	
- *
- * This file is part of OpenDedupe SDFS.
- *
- * OpenDedupe SDFS is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * OpenDedupe SDFS 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Foobar.  If not, see .
- *******************************************************************************/
-package org.opendedup.sdfs.filestore.cloud;
-
-import java.util.Collections;
-
-
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map.Entry;
-import java.util.Random;
-import java.util.concurrent.CopyOnWriteArrayList;
-
-import org.opendedup.sdfs.filestore.cloud.CloudRaidStore.BucketStats;
-
-
-
-public class SortedBucketList implements Runnable {
-	private CopyOnWriteArrayList> al = new CopyOnWriteArrayList>();
-
-	public SortedBucketList() {
-		Thread th = new Thread(this);
-		th.start();
-	}
-
-	@Override
-	public void run() {
-		for (;;) {
-
-			try {
-				Thread.sleep(10 * 1000);
-				synchronized(al) {
-					Collections.sort(al, SIZE_ORDER);
-				}
-
-			} catch (Exception e) {
-
-			} finally {
-
-			}
-		}
-	}
-	
-	public void sort() {
-		synchronized(al) {
-			Collections.sort(al, SIZE_ORDER);
-		}
-	}
-	
-	
-
-	public void add(Entry m) {
-		try {
-			al.add(m);
-			Collections.reverse(al);
-		} catch (Exception e) {
-
-		} finally {
-
-		}
-	}
-
-	public int size() {
-		return this.al.size();
-	}
-
-	public void remove(Entry m) {
-		al.remove(m);
-	}
-
-	public List> getAL() {
-		return this.al;
-	}
-
-	public Iterator> iterator() {
-		return al.iterator();
-	}
-
-	static final Comparator> SIZE_ORDER = new Comparator>() {
-		public int compare(Entry m0,
-				Entry m1) {
-			long m1r = m1.getValue().getAvail();
-			long m0r = m0.getValue().getAvail();
-			long dif = m0r - m1r;
-			if (dif > 0)
-				return -1;
-			if (dif < 0)
-				return 1;
-			else
-				return 0;
-		}
-	};
-	
-	
-	public static void main(String [] args) {
-		Random rnd = new Random();
-		SortedBucketList l = new SortedBucketList();
-		for(byte i = 0;i < 100;i++) {
-			byte id = 0;
-			BucketStats bs = new BucketStats(id,10000,Long.valueOf(rnd.nextInt(10000)),"bn","bc");
-			l.add(new java.util.AbstractMap.SimpleImmutableEntry(i,bs));
-		}
-		l.sort();
-		for(Entry e : l.getAL()) {
-			System.out.println(e.getValue().getAvail());
-		}
-		
-	}
-	
-
-}
diff --git a/src/org/opendedup/sdfs/io/DedupFileChannel.java b/src/org/opendedup/sdfs/io/DedupFileChannel.java
index 57e53f183..74682fc68 100755
--- a/src/org/opendedup/sdfs/io/DedupFileChannel.java
+++ b/src/org/opendedup/sdfs/io/DedupFileChannel.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com	
+ * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com
  *
  * This file is part of OpenDedupe SDFS.
  *
@@ -20,7 +20,6 @@
 
 import java.io.IOException;
 
-
 import java.nio.ByteBuffer;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
@@ -31,9 +30,8 @@
 import org.opendedup.sdfs.notification.SDFSEvent;
 import org.opendedup.util.RandomGUID;
 
-
 /**
- * 
+ *
  * @author annesam This is class that is used as an IO interface between the
  *         user based file system, such as Fuse, and the Dedup engine. The dedup
  *         engine is comprised of the SDFS client and the chunk store service.
@@ -58,9 +56,9 @@ public class DedupFileChannel {
 
 	/**
 	 * Instantiates the DedupFileChannel
-	 * 
+	 *
 	 * @param file
-	 *            the MetaDataDedupFile that the filechannel will be opened for
+	 *             the MetaDataDedupFile that the filechannel will be opened for
 	 * @throws IOException
 	 */
 
@@ -72,30 +70,29 @@ protected DedupFileChannel(SparseDedupFile file, int flags)
 		if (Main.checkArchiveOnOpen) {
 			this.recoverArchives(-1);
 		}
-		
-		if (SDFSLogger.isDebug())
-			SDFSLogger.getLog().debug(
-					"Initializing Cache " + mf.getPath());
+
+		SDFSLogger.getLog().debug(
+				"Initializing Cache " + mf.getPath());
 	}
 
 	private void recoverArchives(long id) throws IOException {
 		try {
-		RestoreArchive ar = new RestoreArchive(mf,id);
-		Thread th = new Thread(ar);
-		th.start();
-		while (!ar.fEvt.isDone()) {
-			try {
-				Thread.sleep(10);
-			} catch (InterruptedException e) {
-				throw new IOException(e);
+			RestoreArchive ar = new RestoreArchive(mf, id);
+			Thread th = new Thread(ar);
+			th.start();
+			while (!ar.fEvt.isDone()) {
+				try {
+					Thread.sleep(10);
+				} catch (InterruptedException e) {
+					throw new IOException(e);
+				}
 			}
-		}
-		if (ar.fEvt.level != SDFSEvent.INFO) {
-			throw new IOException("unable to restore all archived data for "
-					+ mf.getPath());
-		}
-		}catch(Exception e) {
-			SDFSLogger.getLog().error("unable to initiate archive restore for " + id,e);
+			if (ar.fEvt.level != SDFSEvent.INFO) {
+				throw new IOException("unable to restore all archived data for "
+						+ mf.getPath());
+			}
+		} catch (Exception e) {
+			SDFSLogger.getLog().error("unable to initiate archive restore for " + id, e);
 			throw new IOException(e);
 		}
 	}
@@ -117,7 +114,7 @@ public String getID() {
 
 	/**
 	 * Truncate or grow the file
-	 * 
+	 *
 	 * @param siz
 	 *            the size of the file channel
 	 * @exception IOException
@@ -132,8 +129,8 @@ public synchronized void truncateFile(long siz) throws IOException,
 		Lock l = df.getWriteLock();
 		l.lock();
 		try {
-			if (SDFSLogger.isDebug())
-				SDFSLogger.getLog().debug("Truncating File");
+
+			SDFSLogger.getLog().debug("Truncating File");
 			if (siz < mf.length()) {
 				df.truncate(siz);
 				/*
@@ -158,7 +155,7 @@ public synchronized void truncateFile(long siz) throws IOException,
 	}
 
 	/**
-	 * 
+	 *
 	 * @return the number of duplicates found while this file channel is open.
 	 */
 	public long getDups() {
@@ -166,7 +163,7 @@ public long getDups() {
 	}
 
 	/**
-	 * 
+	 *
 	 * @return the current position the file is reading or writing from
 	 */
 	public long position() {
@@ -174,7 +171,7 @@ public long position() {
 	}
 
 	/**
-	 * 
+	 *
 	 * @param pos
 	 *            sets the current position of the file
 	 */
@@ -183,19 +180,19 @@ public void position(long pos) {
 	}
 
 	/**
-	 * 
+	 *
 	 * @return the current size of the file
 	 */
 	public long size() {
 		return mf.length();
 	}
-	
-	public boolean isWrittenTo(){
+
+	public boolean isWrittenTo() {
 		return this.writtenTo;
 	}
 
 	/**
-	 * 
+	 *
 	 * @return the path of the file
 	 */
 	public String getPath() {
@@ -203,7 +200,7 @@ public String getPath() {
 	}
 
 	/**
-	 * 
+	 *
 	 * @return the path of the file
 	 */
 	public String getName() {
@@ -211,7 +208,7 @@ public String getName() {
 	}
 
 	/**
-	 * 
+	 *
 	 * @return the MetaDataDedupFile associated with this DedupFileChannel
 	 */
 	public MetaDataDedupFile getFile() {
@@ -220,9 +217,9 @@ public MetaDataDedupFile getFile() {
 
 	/**
 	 * Forces data to be synced to disk
-	 * 
+	 *
 	 * @param metaData
-	 *            true will sync data
+	 *                 true will sync data
 	 * @throws IOException
 	 * @throws FileClosedException
 	 * @throws ReadOnlyException
@@ -233,7 +230,7 @@ public void force(boolean metaData) throws IOException,
 		l.lock();
 		try {
 			df.sync(false);
-			if(metaData)
+			if (metaData)
 				df.mf.sync();
 		} catch (FileClosedException e) {
 			if (Main.safeClose)
@@ -252,19 +249,24 @@ public void force(boolean metaData) throws IOException,
 		} finally {
 			l.unlock();
 		}
-		
+
 	}
+
+	public void setWrittenTo(boolean written) {
+		this.writtenTo = written;
+	}
+
 	/**
 	 * writes data to the DedupFile
-	 * 
+	 *
 	 * @param bbuf
-	 *            the bytes to write
+	 *               the bytes to write
 	 * @param len
-	 *            the length of data to write
+	 *               the length of data to write
 	 * @param pos
-	 *            the position within the file to write the data to
+	 *               the position within the file to write the data to
 	 * @param offset
-	 *            the offset within the bbuf to start the write from
+	 *               the offset within the bbuf to start the write from
 	 * @throws java.io.IOException
 	 * @throws DataArchivedException
 	 * @throws ReadOnlyException
@@ -274,7 +276,7 @@ public void writeFile(ByteBuffer buf, int len, int pos, long offset,
 			DataArchivedException, ReadOnlyException {
 		if (!df.mf.canWrite())
 			throw new ReadOnlyException();
-		if (SDFSLogger.isDebug()) {
+		{
 			SDFSLogger.getLog().debug(
 					"fc writing " + mf.getPath() + " spos="
 							+ offset + " buffcap=" + buf.capacity() + " len="
@@ -335,15 +337,14 @@ public void writeFile(ByteBuffer buf, int len, int pos, long offset,
 						writeBuffer = df.getWriteBuffer(filePos);
 						writeBuffer.write(b, startPos);
 
-						
 						/*
-						if (Main.volume.isClustered())
-							writeBuffer.flush();
-						*/
+						 * if (Main.volume.isClustered())
+						 * writeBuffer.flush();
+						 */
 					} catch (BufferClosedException e) {
-						if (SDFSLogger.isDebug())
-							SDFSLogger.getLog().debug("trying to write again");
-						df.closeBuffer((WritableCacheBuffer)writeBuffer);
+
+						SDFSLogger.getLog().debug("trying to write again");
+						df.closeBuffer((WritableCacheBuffer) writeBuffer);
 						writeBuffer = null;
 					}
 				}
@@ -360,11 +361,11 @@ public void writeFile(ByteBuffer buf, int len, int pos, long offset,
 			if (Main.checkArchiveOnRead) {
 				SDFSLogger
 						.getLog()
-						.warn("Archived data found during write at ["+offset+ "]in "
+						.warn("Archived data found during write at [" + offset + "]in "
 								+ mf.getPath()
 								+ " at "
 								+ pos
-								+ ". Recovering data from archive. This may take up to 4 hours for " +e.getPos(),e);
+								+ ". Recovering data from archive. This may take up to 4 hours for " + e.getPos(), e);
 				this.recoverArchives(e.getPos());
 				this.writeFile(buf, len, pos, offset, propigate);
 			} else
@@ -385,7 +386,8 @@ public void writeFile(ByteBuffer buf, int len, int pos, long offset,
 		} catch (Exception e) {
 			SDFSLogger.getLog().fatal(
 					"error while writing to " + this.mf.getPath()
-							+ " " + e.toString(), e);
+							+ " " + e.toString(),
+					e);
 			Main.volume.addWriteError();
 			throw new IOException("error while writing to "
 					+ this.mf.getPath() + " " + e.toString());
@@ -400,7 +402,7 @@ public void writeFile(ByteBuffer buf, int len, int pos, long offset,
 
 	/**
 	 * Closes the byte array
-	 * 
+	 *
 	 * @throws IOException
 	 */
 	protected void close(int flags) throws IOException {
@@ -410,10 +412,10 @@ protected void close(int flags) throws IOException {
 			l = df.getReadLock();
 			l.lock();
 			if (Main.safeClose) {
-				if (SDFSLogger.isDebug())
-					SDFSLogger.getLog().debug(
-							"close " + mf.getPath() + " flag="
-									+ flags);
+
+				SDFSLogger.getLog().debug(
+						"close " + mf.getPath() + " flag="
+								+ flags);
 				if (!this.isClosed()) {
 
 					try {
@@ -441,13 +443,13 @@ protected void close(int flags) throws IOException {
 
 	/**
 	 * Closes the byte array
-	 * 
+	 *
 	 * @throws IOException
 	 */
 	public void forceClose() throws IOException {
-		if (SDFSLogger.isDebug())
-			SDFSLogger.getLog().debug(
-					"close " + mf.getPath() + " flag=" + flags);
+
+		SDFSLogger.getLog().debug(
+				"close " + mf.getPath() + " flag=" + flags);
 		Lock l = null;
 		this.closeLock.lock();
 		try {
@@ -481,15 +483,15 @@ public void forceClose() throws IOException {
 
 	/**
 	 * Reads data from the DedupFile
-	 * 
+	 *
 	 * @param bbuf
-	 *            the byte array to copy the data to.
+	 *                the byte array to copy the data to.
 	 * @param bufPos
-	 *            the position within the array to copy the data too.
+	 *                the position within the array to copy the data too.
 	 * @param siz
-	 *            the mount of data to copy to the bbuf.
+	 *                the mount of data to copy to the bbuf.
 	 * @param filePos
-	 *            the position within the file to read the data from
+	 *                the position within the file to read the data from
 	 * @return the bytes read
 	 * @throws IOException
 	 * @throws DataArchivedException
@@ -498,17 +500,16 @@ public int read(ByteBuffer buf, int bufPos, int siz, long filePos)
 			throws IOException, DataArchivedException {
 		// this.addAio();
 
-		if (SDFSLogger.isDebug())
-			SDFSLogger.getLog().debug(
-					"fc reading " + mf.getPath() + " spos="
-							+ filePos + " buffcap=" + buf.capacity() + " len="
-							+ siz + " bcpos=" + bufPos);
+		SDFSLogger.getLog().debug(
+				"fc reading " + mf.getPath() + " spos="
+						+ filePos + " buffcap=" + buf.capacity() + " len="
+						+ siz + " bcpos=" + bufPos);
 		Lock l = df.getReadLock();
 		l.lock();
 		try {
 			if (Main.readAhead) {
-				if(rh == null)
-					rh =ReadAhead.getReadAhead(this.df);
+				if (rh == null)
+					rh = ReadAhead.getReadAhead(this.df);
 				rh.cacheFromRange(filePos);
 			}
 		} catch (Exception e) {
@@ -548,21 +549,21 @@ public int read(ByteBuffer buf, int bufPos, int siz, long filePos)
 								buf.put(_rb, 0, nl);
 							else
 								buf.put(_rb);
-							//SDFSLogger.getLog().info(new String(_rb));
+							// SDFSLogger.getLog().info(new String(_rb));
 							mf.getIOMonitor()
 									.addBytesRead(_len, true);
 							currentLocation = currentLocation + _len;
 							bytesLeft = bytesLeft - _len;
 							read = read + _len;
 							/*
-							if (Main.volume.isClustered())
-								readBuffer.flush();
-								*/
+							 * if (Main.volume.isClustered())
+							 * readBuffer.flush();
+							 */
 						} catch (BufferClosedException e) {
-							if (SDFSLogger.isDebug())
-								SDFSLogger.getLog().debug(
-										"trying to write again");
-							df.closeBuffer((WritableCacheBuffer)readBuffer);
+
+							SDFSLogger.getLog().debug(
+									"trying to write again");
+							df.closeBuffer((WritableCacheBuffer) readBuffer);
 							readBuffer = null;
 						}
 					}
@@ -570,11 +571,12 @@ public int read(ByteBuffer buf, int bufPos, int siz, long filePos)
 					if (Main.checkArchiveOnRead) {
 						SDFSLogger
 								.getLog()
-								.warn("Archived data found in read at ["+filePos+ "]in "
+								.warn("Archived data found in read at [" + filePos + "]in "
 										+ mf.getPath()
 										+ " at "
 										+ startPos
-										+ ". Recovering data from archive. This may take up to 4 hours " + e.getPos(),e);
+										+ ". Recovering data from archive. This may take up to 4 hours " + e.getPos(),
+										e);
 						this.recoverArchives(e.getPos());
 						this.read(buf, bufPos, siz, filePos);
 					} else
@@ -605,7 +607,7 @@ public int read(ByteBuffer buf, int bufPos, int siz, long filePos)
 			}
 			return read;
 		} catch (DataArchivedException e) {
-			SDFSLogger.getLog().error("archive exception " + e.getPos(),e);
+			SDFSLogger.getLog().error("archive exception " + e.getPos(), e);
 			throw e;
 		} catch (Exception e) {
 			SDFSLogger.getLog().error(
@@ -629,7 +631,7 @@ public SparseDedupFile getDedupFile() {
 
 	/**
 	 * Seek to the specified file position.
-	 * 
+	 *
 	 * @param pos
 	 *            long
 	 * @param typ
@@ -641,31 +643,31 @@ public long seekFile(long pos, int typ) throws IOException {
 		Lock l = df.getReadLock();
 		l.lock();
 		try {
-			if (SDFSLogger.isDebug())
-				SDFSLogger.getLog().debug(
-						"seek " + mf.getPath() + " at " + pos
-								+ " type=" + typ);
+
+			SDFSLogger.getLog().debug(
+					"seek " + mf.getPath() + " at " + pos
+							+ " type=" + typ);
 			// Check if the current file position is the required file position
 
 			switch (typ) {
 
-			// From start of file
+				// From start of file
 
-			case SeekType.StartOfFile:
-				if (this.position() != pos)
-					this.currentPosition = pos;
-				break;
+				case SeekType.StartOfFile:
+					if (this.position() != pos)
+						this.currentPosition = pos;
+					break;
 
-			// From current position
+				// From current position
 
-			case SeekType.CurrentPos:
-				this.currentPosition = this.currentPosition + pos;
-				break;
-			// From end of file
-			case SeekType.EndOfFile: {
-				this.currentPosition = pos;
-			}
-				break;
+				case SeekType.CurrentPos:
+					this.currentPosition = this.currentPosition + pos;
+					break;
+				// From end of file
+				case SeekType.EndOfFile: {
+					this.currentPosition = pos;
+				}
+					break;
 			}
 			mf.setLastAccessed(System.currentTimeMillis());
 			// Return the new file position
@@ -676,7 +678,7 @@ public long seekFile(long pos, int typ) throws IOException {
 	}
 
 	/**
-	 * 
+	 *
 	 * @return the MetaDataDedupFile for this DedupFileChannel
 	 * @throws IOException
 	 */
@@ -687,49 +689,49 @@ public MetaDataDedupFile openFile() throws IOException {
 
 	/**
 	 * Tries to lock a file at a specific position
-	 * 
+	 *
 	 * @param position
-	 *            the position to lock the file at.
+	 *                 the position to lock the file at.
 	 * @param size
-	 *            the size of the data to be locked
+	 *                 the size of the data to be locked
 	 * @param shared
-	 *            if the lock is shared or not
+	 *                 if the lock is shared or not
 	 * @return true if it is locked
 	 * @throws IOException
 	 */
 	public DedupFileLock tryLock(long position, long size, boolean shared)
 			throws IOException {
-		if (SDFSLogger.isDebug())
-			SDFSLogger.getLog().debug(
-					"trylock " + mf.getPath() + " at " + position
-							+ " size=" + size + " shared="
-							+ Boolean.toString(shared));
+
+		SDFSLogger.getLog().debug(
+				"trylock " + mf.getPath() + " at " + position
+						+ " size=" + size + " shared="
+						+ Boolean.toString(shared));
 		return df.addLock(this, position, size, shared);
 	}
 
 	/**
 	 * Tries to lock a file exclusively
-	 * 
+	 *
 	 * @return true if the file is locked
 	 * @throws IOException
 	 */
 	public DedupFileLock tryLock() throws IOException {
-		if (SDFSLogger.isDebug())
-			SDFSLogger.getLog().debug("trylock " + mf.getPath());
+
+		SDFSLogger.getLog().debug("trylock " + mf.getPath());
 
 		return df.addLock(this, 0, mf.length(), false);
 	}
 
 	/**
 	 * Removes an existing lock on a file
-	 * 
+	 *
 	 * @param lock
-	 *            the lock on the file
+	 *             the lock on the file
 	 */
 	public void removeLock(DedupFileLock lock) {
-		if (SDFSLogger.isDebug())
-			SDFSLogger.getLog().debug(
-					"removelock " + mf.getPath());
+
+		SDFSLogger.getLog().debug(
+				"removelock " + mf.getPath());
 		lock.release();
 		df.removeLock(lock);
 	}
@@ -746,10 +748,10 @@ public void trim(long start, int len) throws IOException {
 		Lock l = df.getReadLock();
 		l.lock();
 		try {
-			if (SDFSLogger.isDebug())
-				SDFSLogger.getLog().debug(
-						"trim " + mf.getPath() + " start="
-								+ start + " len=" + len);
+
+			SDFSLogger.getLog().debug(
+					"trim " + mf.getPath() + " start="
+							+ start + " len=" + len);
 			df.trim(start, len);
 		} finally {
 			l.unlock();
diff --git a/src/org/opendedup/sdfs/io/HashLocPair.java b/src/org/opendedup/sdfs/io/HashLocPair.java
index e282843ef..ffde6d7b1 100644
--- a/src/org/opendedup/sdfs/io/HashLocPair.java
+++ b/src/org/opendedup/sdfs/io/HashLocPair.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com	
+ * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com
  *
  * This file is part of OpenDedupe SDFS.
  *
@@ -163,7 +163,7 @@ public boolean isDup() {
 	public void setDup(boolean dup) {
 		this.dup = dup;
 	}
-	
+
 	@Override
 	public boolean equals(Object obj) {
 		HashLocPair p = (HashLocPair)obj;
@@ -173,7 +173,7 @@ public boolean equals(Object obj) {
 			return false;
 	}
 
-	
+
 	@Override
 	public int hashCode() {
 		return ByteBuffer.wrap(this.hash).getInt();
@@ -200,6 +200,7 @@ public static HashLocPair fromProtoBuf(HashLocPairP p) throws IOException {
 		hlp.pos = p.getPos();
 		hlp.offset = p.getOffset();
 		hlp.nlen = p.getNlen();
+		hlp.inserted = p.getInserted();
 		hlp.checkCorrupt();
 		return hlp;
 	}
diff --git a/src/org/opendedup/sdfs/io/MetaDataDedupFile.java b/src/org/opendedup/sdfs/io/MetaDataDedupFile.java
index a68eb772f..6f60b1345 100644
--- a/src/org/opendedup/sdfs/io/MetaDataDedupFile.java
+++ b/src/org/opendedup/sdfs/io/MetaDataDedupFile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com	
+ * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com
  *
  * This file is part of OpenDedupe SDFS.
  *
@@ -18,7 +18,6 @@
  *******************************************************************************/
 package org.opendedup.sdfs.io;
 
-
 import java.io.File;
 
 import java.io.FileInputStream;
@@ -48,7 +47,7 @@
 import javax.xml.parsers.ParserConfigurationException;
 
 import org.apache.commons.io.FileUtils;
-import org.apache.commons.text.StringEscapeUtils;
+import org.apache.commons.lang3.StringEscapeUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.mapdb.CC;
 import org.opendedup.collections.LongByteArrayMap;
@@ -77,7 +76,7 @@
 import com.google.gson.JsonObject;
 
 /**
- * 
+ *
  * @author annesam Stores Meta-Data about a dedupFile. This class is modeled
  *         from the java.io.File class. Meta-Data files are stored within the
  *         MetaDataFileStore @see com.annesam.filestore.MetaDataFileStore
@@ -133,8 +132,8 @@ public static void unregisterListener(Object obj) {
 	public int getMode() throws IOException {
 		if (mode == -1) {
 			Path p = Paths.get(this.path);
-			if(!OSValidator.isWindows()) {
-			this.mode = (Integer) Files.getAttribute(p, "unix:mode",LinkOption.NOFOLLOW_LINKS);
+			if (!OSValidator.isWindows()) {
+				this.mode = (Integer) Files.getAttribute(p, "unix:mode", LinkOption.NOFOLLOW_LINKS);
 			} else {
 				this.mode = 0;
 			}
@@ -149,15 +148,15 @@ public void setMode(int mode) throws IOException {
 	public void setMode(int mode, boolean propigateEvent) throws IOException {
 		this.mode = mode;
 		this.dirty = true;
-		if(!OSValidator.isWindows()) {
-		Path p = Paths.get(this.path);
-		Files.setAttribute(p, "unix:mode", Integer.valueOf(mode), LinkOption.NOFOLLOW_LINKS);
+		if (!OSValidator.isWindows()) {
+			Path p = Paths.get(this.path);
+			Files.setAttribute(p, "unix:mode", Integer.valueOf(mode), LinkOption.NOFOLLOW_LINKS);
 		}
 	}
 
 	/**
 	 * adds a posix extended attribute
-	 * 
+	 *
 	 * @param name  the name of the attribute
 	 * @param value the value of the attribute
 	 * @throws IOException
@@ -169,7 +168,7 @@ public void addXAttribute(String name, String value) throws IOException {
 
 	/**
 	 * adds a posix extended attribute
-	 * 
+	 *
 	 * @param name           the name of the attribute
 	 * @param value          the value of the attribute
 	 * @param propigateEvent TODO
@@ -220,7 +219,7 @@ public String getBackingFile() {
 
 	/**
 	 * returns an extended attribute for a give name
-	 * 
+	 *
 	 * @param name
 	 * @return the extended attribute
 	 */
@@ -232,7 +231,7 @@ public String getXAttribute(String name) {
 	}
 
 	/**
-	 * 
+	 *
 	 * @return list of all extended attribute names
 	 */
 	public String[] getXAttersNames() {
@@ -247,7 +246,7 @@ public String[] getXAttersNames() {
 	}
 
 	/**
-	 * 
+	 *
 	 * @return posix permissions e.g. 0777
 	 */
 	public int getPermissions() {
@@ -255,7 +254,7 @@ public int getPermissions() {
 	}
 
 	/**
-	 * 
+	 *
 	 * @param permissions sets permissions
 	 */
 	public void setPermissions(int permissions) {
@@ -263,7 +262,7 @@ public void setPermissions(int permissions) {
 	}
 
 	/**
-	 * 
+	 *
 	 * @param permissions    sets permissions
 	 * @param propigateEvent TODO
 	 */
@@ -278,15 +277,15 @@ public void setPermissions(int permissions, boolean propigateEvent) {
 	}
 
 	/**
-	 * 
+	 *
 	 * @return the file owner id
 	 * @throws IOException
 	 */
 	public int getOwner_id() throws IOException {
 		if (owner_id == -1) {
-			if(!OSValidator.isWindows()) {
-			Path p = Paths.get(this.path);
-			this.owner_id = (Integer) Files.getAttribute(p, "unix:uid",LinkOption.NOFOLLOW_LINKS);
+			if (!OSValidator.isWindows()) {
+				Path p = Paths.get(this.path);
+				this.owner_id = (Integer) Files.getAttribute(p, "unix:uid", LinkOption.NOFOLLOW_LINKS);
 			} else {
 				this.owner_id = 0;
 			}
@@ -295,39 +294,39 @@ public int getOwner_id() throws IOException {
 	}
 
 	/**
-	 * 
+	 *
 	 * @param owner_id sets the file owner id
 	 * @throws IOException
 	 */
 	public void setOwner_id(int owner_id) throws IOException {
 		setOwner_id(owner_id, true);
 	}
-	
+
 	/**
-	 * 
+	 *
 	 * @param owner_id       sets the file owner id
 	 * @param propigateEvent TODO
 	 * @throws IOException
 	 */
 	public void setOwner_id(int owner_id, boolean propigateEvent) throws IOException {
 		this.owner_id = owner_id;
-		if(!OSValidator.isWindows()) {
-		Path p = Paths.get(this.path);
-		Files.setAttribute(p, "unix:uid", Integer.valueOf(owner_id), LinkOption.NOFOLLOW_LINKS);
+		if (!OSValidator.isWindows()) {
+			Path p = Paths.get(this.path);
+			Files.setAttribute(p, "unix:uid", Integer.valueOf(owner_id), LinkOption.NOFOLLOW_LINKS);
 		}
 	}
 
 	/**
-	 * 
+	 *
 	 * @return returns the group owner id
 	 * @throws IOException
 	 */
 	public int getGroup_id() throws IOException {
 		if (group_id == -1) {
-			if(!OSValidator.isWindows()) {
-			Path p = Paths.get(this.path);
-			this.group_id = (Integer) Files.getAttribute(p, "unix:gid", LinkOption.NOFOLLOW_LINKS);
-			}else { 
+			if (!OSValidator.isWindows()) {
+				Path p = Paths.get(this.path);
+				this.group_id = (Integer) Files.getAttribute(p, "unix:gid", LinkOption.NOFOLLOW_LINKS);
+			} else {
 				this.group_id = 0;
 			}
 		}
@@ -335,7 +334,7 @@ public int getGroup_id() throws IOException {
 	}
 
 	/**
-	 * 
+	 *
 	 * @param group_id sets the group owner id
 	 * @throws IOException
 	 */
@@ -344,21 +343,21 @@ public void setGroup_id(int group_id) throws IOException {
 	}
 
 	/**
-	 * 
+	 *
 	 * @param group_id       sets the group owner id
 	 * @param propigateEvent TODO
 	 * @throws IOException
 	 */
 	public void setGroup_id(int group_id, boolean propigateEvent) throws IOException {
 		this.group_id = group_id;
-		if(!OSValidator.isWindows()) {
-		Path p = Paths.get(this.path);
-		Files.setAttribute(p, "unix:gid", Integer.valueOf(group_id), LinkOption.NOFOLLOW_LINKS);
+		if (!OSValidator.isWindows()) {
+			Path p = Paths.get(this.path);
+			Files.setAttribute(p, "unix:gid", Integer.valueOf(group_id), LinkOption.NOFOLLOW_LINKS);
 		}
 	}
 
 	/**
-	 * 
+	 *
 	 * @return true if this file is a vmdk
 	 */
 	public boolean isVmdk() {
@@ -366,7 +365,7 @@ public boolean isVmdk() {
 	}
 
 	/**
-	 * 
+	 *
 	 * @param vmdk flags this file as a vmdk if true
 	 */
 	public void setVmdk(boolean vmdk) {
@@ -374,7 +373,7 @@ public void setVmdk(boolean vmdk) {
 	}
 
 	/**
-	 * 
+	 *
 	 * @param vmdk           flags this file as a vmdk if true
 	 * @param propigateEvent TODO
 	 */
@@ -411,8 +410,7 @@ public static MetaDataDedupFile getFile(String path) throws IOException {
 				in = new ObjectInputStream(new FileInputStream(path));
 				mf = (MetaDataDedupFile) in.readObject();
 				mf.path = path;
-				if (SDFSLogger.isDebug())
-					SDFSLogger.getLog().debug("reading in file " + mf.path + " df=" + mf.dfGuid);
+				SDFSLogger.getLog().debug("reading in file " + mf.path + " df=" + mf.dfGuid);
 				if (mf.getDfGuid() != null) {
 					SparseDedupFile df = DedupFileStore.get(mf.getDfGuid());
 					if (df != null) {
@@ -436,7 +434,7 @@ public static MetaDataDedupFile getFile(String path) throws IOException {
 	}
 
 	/**
-	 * 
+	 *
 	 * @return returns the IOMonitor for this file. IOMonitors monitor reads,writes,
 	 *         and dedup rate.
 	 */
@@ -447,7 +445,7 @@ public IOMonitor getIOMonitor() {
 	}
 
 	/**
-	 * 
+	 *
 	 * @param path the path to the dedup file.
 	 */
 	private MetaDataDedupFile(String path) {
@@ -456,7 +454,7 @@ private MetaDataDedupFile(String path) {
 	}
 
 	/**
-	 * 
+	 *
 	 * @param path the path to the dedup file.
 	 */
 	private MetaDataDedupFile(String path, MetaDataDedupFile mf) {
@@ -480,7 +478,7 @@ private MetaDataDedupFile(String path, MetaDataDedupFile mf) {
 	}
 
 	/**
-	 * 
+	 *
 	 * @param path the path to the dedup file.
 	 */
 	public MetaDataDedupFile() {
@@ -492,9 +490,8 @@ public SparseDedupFile getDedupFile(boolean addtoopen) throws IOException {
 			if (this.dfGuid == null) {
 				SparseDedupFile df = new SparseDedupFile(this);
 				this.dfGuid = df.getGUID();
-				if (SDFSLogger.isDebug())
-					SDFSLogger.getLog()
-							.debug("No DF EXISTS .... Set dedup file for " + this.getPath() + " to " + this.dfGuid);
+				SDFSLogger.getLog()
+						.debug("No DF EXISTS .... Set dedup file for " + this.getPath() + " to " + this.dfGuid);
 				if (addtoopen)
 					DedupFileStore.addOpenDedupFiles(df);
 				// this.sync();
@@ -520,7 +517,7 @@ public void setDfGuid(String guid, boolean propigateEvent) {
 	}
 
 	/**
-	 * 
+	 *
 	 * @return the guid associated with this file
 	 */
 	public String getGUID() {
@@ -529,7 +526,7 @@ public String getGUID() {
 
 	/**
 	 * Clones a file and the underlying DedupFile
-	 * 
+	 *
 	 * @param snaptoPath the path to clone to
 	 * @param overwrite  if true, it will overwrite the destination file if it
 	 *                   alreay exists
@@ -542,7 +539,7 @@ public MetaDataDedupFile snapshot(String snaptoPath, boolean overwrite, SDFSEven
 
 	/**
 	 * Clones a file and the underlying DedupFile
-	 * 
+	 *
 	 * @param snaptoPath     the path to clone to
 	 * @param overwrite      if true, it will overwrite the destination file if it
 	 *                       alreay exists
@@ -570,8 +567,7 @@ public MetaDataDedupFile snapshot(String snaptoPath, boolean overwrite, SDFSEven
 			}
 			return getFile(snaptoPath);
 		} else if (!this.isDirectory()) {
-			if (SDFSLogger.isDebug())
-				SDFSLogger.getLog().debug("is snapshot file");
+			SDFSLogger.getLog().debug("is snapshot file");
 			File f = new File(snaptoPath);
 			if (f.exists() && !overwrite)
 				throw new IOException("path exists [" + snaptoPath + "]Cannot overwrite existing data ");
@@ -587,8 +583,7 @@ else if (f.exists()) {
 			try {
 				DedupFileStore.cloneDedupFile(this, _mf);
 			} catch (java.lang.NullPointerException e) {
-				if (SDFSLogger.isDebug())
-					SDFSLogger.getLog().debug("no dedupfile for " + this.path, e);
+				SDFSLogger.getLog().debug("no dedupfile for " + this.path, e);
 			}
 			_mf.getIOMonitor().setVirtualBytesWritten(this.getIOMonitor().getVirtualBytesWritten(), true);
 			_mf.getIOMonitor().setDuplicateBlocks(
@@ -605,8 +600,7 @@ else if (f.exists()) {
 			evt.addCount(1);
 			return _mf;
 		} else {
-			if (SDFSLogger.isDebug())
-				SDFSLogger.getLog().debug("is snapshot dir");
+			SDFSLogger.getLog().debug("is snapshot dir");
 
 			File f = new File(snaptoPath);
 
@@ -635,7 +629,7 @@ else if (f.exists()) {
 
 	/**
 	 * Clones a file and the underlying DedupFile
-	 * 
+	 *
 	 * @param snaptoPath the path to clone to
 	 * @param overwrite  if true, it will overwrite the destination file if it
 	 *                   alreay exists
@@ -648,12 +642,12 @@ public void copyTo(String npath, boolean overwrite) throws IOException {
 
 	/**
 	 * Clones a file and the underlying DedupFile
-	 * 
+	 *
 	 * @param overwrite      if true, it will overwrite the destination file if it
 	 *                       alreay exists
 	 * @param propigateEvent TODO
 	 * @param snaptoPath     the path to clone to
-	 * 
+	 *
 	 * @return the new clone
 	 * @throws IOException
 	 */
@@ -682,9 +676,8 @@ private void copyDir(String npath) throws IOException {
 				if (file.isDirectory())
 					file.copyDir(npath);
 				else {
-					if (SDFSLogger.isDebug())
-						SDFSLogger.getLog()
-								.debug("copy dedup file for : " + file.getPath() + " guid :" + file.getDfGuid());
+					SDFSLogger.getLog()
+							.debug("copy dedup file for : " + file.getPath() + " guid :" + file.getDfGuid());
 					if (file.dfGuid != null) {
 						if (DedupFileStore.fileOpen(file))
 							file.getDedupFile(false).copyTo(npath, true);
@@ -715,7 +708,7 @@ private void copyDir(String npath) throws IOException {
 
 	/**
 	 * initiates the MetaDataDedupFile
-	 * 
+	 *
 	 * @param path the path to the file
 	 */
 	private void init(String path) {
@@ -723,8 +716,7 @@ private void init(String path) {
 		this.path = path;
 		File f = new File(path);
 		if (!f.exists()) {
-			if (SDFSLogger.isDebug())
-				SDFSLogger.getLog().debug("Creating new MetaFile for " + this.path);
+			SDFSLogger.getLog().debug("Creating new MetaFile for " + this.path);
 
 			this.guid = UUID.randomUUID().toString();
 			monitor = new IOMonitor(this);
@@ -756,7 +748,7 @@ public Map getExtendedAttributes() {
 	 * Writes the stub for this file to disk. Stubs are pointers written to a file
 	 * system that map to virtual filesystem directory and file structure. The stub
 	 * only contains the guid associated with the file in question.
-	 * 
+	 *
 	 * @return true if written
 	 */
 	private boolean writeFile(boolean notify) {
@@ -823,7 +815,7 @@ private boolean writeFile(boolean notify) {
 
 	/**
 	 * Serializes the file to the MetaFileStore
-	 * 
+	 *
 	 * @return true if serialized
 	 */
 	public boolean unmarshal() {
@@ -831,7 +823,7 @@ public boolean unmarshal() {
 	}
 
 	/**
-	 * 
+	 *
 	 * @return returns the GUID for the underlying DedupFile
 	 */
 	public String getDfGuid() {
@@ -839,11 +831,11 @@ public String getDfGuid() {
 	}
 
 	/**
-	 * 
+	 *
 	 * @return time when file was last modified
 	 */
 	/**
-	 * 
+	 *
 	 * @return time when file was last modified
 	 */
 	public long lastModified() {
@@ -855,7 +847,7 @@ public long lastModified() {
 	}
 
 	/**
-	 * 
+	 *
 	 * @return creates a blank new file
 	 */
 	public boolean createNewFile() {
@@ -864,7 +856,7 @@ public boolean createNewFile() {
 	}
 
 	/**
-	 * 
+	 *
 	 * @return true if hidden
 	 */
 	public boolean isHidden() {
@@ -872,7 +864,7 @@ public boolean isHidden() {
 	}
 
 	/**
-	 * 
+	 *
 	 * @param hidden true if hidden
 	 */
 	public void setHidden(boolean hidden) {
@@ -880,7 +872,7 @@ public void setHidden(boolean hidden) {
 	}
 
 	/**
-	 * 
+	 *
 	 * @param hidden         true if hidden
 	 * @param propigateEvent TODO
 	 */
@@ -896,7 +888,7 @@ public void setHidden(boolean hidden, boolean propigateEvent) {
 	}
 
 	/**
-	 * 
+	 *
 	 * @return true if deleted
 	 */
 	public boolean deleteStub(boolean localonly) {
@@ -919,7 +911,7 @@ public boolean deleteStub(boolean localonly) {
 	}
 
 	/**
-	 * 
+	 *
 	 * @param df the DedupFile that will be referenced within this file
 	 */
 	protected void setDedupFile(DedupFile df) {
@@ -927,7 +919,7 @@ protected void setDedupFile(DedupFile df) {
 	}
 
 	/**
-	 * 
+	 *
 	 * @param df             the DedupFile that will be referenced within this file
 	 * @param propigateEvent TODO
 	 */
@@ -940,7 +932,7 @@ protected void setDedupFile(DedupFile df, boolean propigateEvent) {
 	}
 
 	/**
-	 * 
+	 *
 	 * @return the children of this directory and null if it is not a directory.
 	 */
 	public String[] list() {
@@ -953,7 +945,7 @@ public String[] list() {
 	}
 
 	/**
-	 * 
+	 *
 	 * @return the children as MetaDataDedupFiles or null if it is not a directory
 	 */
 	public MetaDataDedupFile[] listFiles() {
@@ -1019,14 +1011,13 @@ public boolean renameTo(String dest, boolean propigateEvent) throws IOException
 					eventBus.post(new MFileRenamed(this, oldPath, newPath));
 					this.dirty = true;
 					eventBus.post(new MFileDeleted(this));
-					if (SDFSLogger.isDebug())
-						SDFSLogger.getLog().debug("FileSystem rename succesful");
+					SDFSLogger.getLog().debug("FileSystem rename succesful");
 
 					this.path = dest;
 					this.unmarshal();
 
 				} else {
-					SDFSLogger.getLog().warn("unable to move file");
+					SDFSLogger.getLog().warn("unable to move file " + f.getPath() + " to " + new File(dest).getPath());
 
 				}
 				return rename;
@@ -1193,8 +1184,6 @@ public boolean setLastModified(long lastModified, boolean propigateEvent) {
 	 * @return the length
 	 */
 	public long length() {
-		if (SDFSLogger.isDebug())
-			SDFSLogger.getLog().debug("len=" + this.length);
 		return length;
 	}
 
@@ -1233,7 +1222,7 @@ public String getPath() {
 	}
 
 	/**
-	 * 
+	 *
 	 * @param filePath the path to the file
 	 * @return true if the file exists
 	 */
@@ -1260,7 +1249,7 @@ public void sync() {
 
 	/**
 	 * writes all the metadata and the Dedup blocks to the dedup chunk service
-	 * 
+	 *
 	 * @param propigateEvent TODO
 	 */
 	public void sync(boolean propigateEvent) {
@@ -1270,7 +1259,7 @@ public void sync(boolean propigateEvent) {
 	}
 
 	/**
-	 * 
+	 *
 	 * @param lastAccessed
 	 */
 	public void setLastAccessed(long lastAccessed) {
@@ -1302,7 +1291,7 @@ public boolean isRetentionLock() {
 	}
 
 	/**
-	 * 
+	 *
 	 * @param lastAccessed
 	 * @param propigateEvent TODO
 	 **/
@@ -1436,13 +1425,13 @@ public FileInfoResponse toGRPC(boolean compact) throws IOException {
 			if (this.symlink) {
 				b.setSymlinkPath(this.getSymlinkPath());
 			}
-		} else if(!compact && this.isSymlink()) {
-				Path p = Paths.get(this.getPath());
-				b.setSymlinkPath(this.getSymlinkPath());
-				b.setSymlink(this.symlink);
-				File f = new File(this.getPath());
-				BasicFileAttributes attrs = Files.readAttributes(p, BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS);
-				b.setAtime(attrs.lastAccessTime().toMillis()).setMtime(attrs.lastModifiedTime().toMillis())
+		} else if (!compact && this.isSymlink()) {
+			Path p = Paths.get(this.getPath());
+			b.setSymlinkPath(this.getSymlinkPath());
+			b.setSymlink(this.symlink);
+			File f = new File(this.getPath());
+			BasicFileAttributes attrs = Files.readAttributes(p, BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS);
+			b.setAtime(attrs.lastAccessTime().toMillis()).setMtime(attrs.lastModifiedTime().toMillis())
 					.setCtime(attrs.creationTime().toMillis()).setHidden(f.isHidden()).setSize(f.length())
 					.setSymlink(this.symlink).setMode(this.getMode());
 		}
@@ -1615,7 +1604,7 @@ public void setSymlink(boolean symlink) {
 	}
 
 	public void setSymlink(boolean symlink, boolean propigateEvent) {
-			this.symlink = symlink;
+		this.symlink = symlink;
 	}
 
 	public String getSymlinkPath() {
@@ -1623,7 +1612,7 @@ public String getSymlinkPath() {
 	}
 
 	public void setSymlinkPath(String symlinkPath) {
-			setSymlinkPath(symlinkPath, true);
+		setSymlinkPath(symlinkPath, true);
 	}
 
 	public void setSymlinkPath(String symlinkPath, boolean propigateEvent) {
@@ -1635,7 +1624,7 @@ public long getAttributes() {
 	}
 
 	public void setAttributes(long attributes) {
-			this.attributes = attributes;
+		this.attributes = attributes;
 	}
 
 	public boolean isImporting() {
@@ -1719,7 +1708,7 @@ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundExcept
 					this.importing = in.readBoolean();
 				}
 				if (in.available() > 0) {
-					this.permissions =  in.readInt();
+					this.permissions = in.readInt();
 				}
 
 				/*
diff --git a/src/org/opendedup/sdfs/io/SparseDedupFile.java b/src/org/opendedup/sdfs/io/SparseDedupFile.java
index a6cd5d21a..49e65efea 100644
--- a/src/org/opendedup/sdfs/io/SparseDedupFile.java
+++ b/src/org/opendedup/sdfs/io/SparseDedupFile.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com	
+ * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com
  *
  * This file is part of OpenDedupe SDFS.
  *
@@ -20,6 +20,9 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.LinkOption;
+import java.nio.file.Paths;
 import java.security.MessageDigest;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -58,9 +61,11 @@
 import org.opendedup.sdfs.io.events.SFileWritten;
 import org.opendedup.sdfs.servers.HCServiceProxy;
 import org.opendedup.util.DeleteDir;
+import org.opendedup.util.OSValidator;
 
 import com.google.common.cache.CacheBuilder;
 import com.google.common.cache.CacheLoader;
+import com.google.common.cache.CacheStats;
 import com.google.common.cache.LoadingCache;
 import com.google.common.cache.RemovalListener;
 import com.google.common.cache.RemovalNotification;
@@ -96,7 +101,7 @@ public class SparseDedupFile implements DedupFile {
 	private ConcurrentHashMap openBuffers = new ConcurrentHashMap(
 			256, .75f);
 	protected LoadingCache writeBuffers = CacheBuilder.newBuilder()
-			.maximumSize(maxWriteBuffers).expireAfterAccess(60, TimeUnit.SECONDS).concurrencyLevel(64)
+			.maximumSize(maxWriteBuffers).expireAfterAccess(60, TimeUnit.SECONDS).concurrencyLevel(Main.writeThreads)
 			.removalListener(new RemovalListener() {
 				public void onRemoval(RemovalNotification removal) {
 					WritableCacheBuffer ck = removal.getValue();
@@ -132,7 +137,10 @@ public WritableCacheBuffer load(Long key) throws IOException, FileClosedExceptio
 		if (!f.exists())
 			f.mkdirs();
 		try {
-
+			if (OSValidator.isWindows()) {
+				Files.setAttribute(Paths.get(f.getParentFile().getPath()), "dos:hidden", true,
+						LinkOption.NOFOLLOW_LINKS);
+			}
 		} catch (Exception e) {
 			e.printStackTrace();
 			System.exit(2);
@@ -164,10 +172,8 @@ public SparseDedupFile(MetaDataDedupFile mf) throws IOException {
 		} else {
 			this.GUID = mf.getDfGuid();
 		}
-		if (SDFSLogger.isDebug()) {
-			SDFSLogger.getLog().debug("dedup file opened for " + mf.getPath() + " df=" + this.GUID);
-			SDFSLogger.getLog().debug("LRU Size is " + (maxWriteBuffers + 1));
-		}
+		SDFSLogger.getLog().debug("dedup file opened for " + mf.getPath() + " df=" + this.GUID);
+		SDFSLogger.getLog().debug("LRU Size is " + (maxWriteBuffers + 1));
 	}
 
 	public void setReconstructed(boolean reconstructed) {
@@ -176,7 +182,7 @@ public void setReconstructed(boolean reconstructed) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @seecom.annesam.sdfs.io.AbstractDedupFile#snapshot(com.annesam.sdfs.io.
 	 * MetaDataDedupFile)
 	 */
@@ -185,6 +191,14 @@ public DedupFile snapshot(MetaDataDedupFile snapmf) throws IOException, Hashtabl
 		return this.snapshot(snapmf, true);
 	}
 
+	public void CacheCleanup() {
+		this.writeBuffers.cleanUp();
+	}
+
+	public CacheStats getCacheStats() {
+		return this.writeBuffers.stats();
+	}
+
 	@Override
 	public DedupFile snapshot(MetaDataDedupFile snapmf, boolean propigate) throws IOException, HashtableFullException {
 		DedupFileChannel ch = null;
@@ -198,11 +212,9 @@ public DedupFile snapshot(MetaDataDedupFile snapmf, boolean propigate) throws IO
 					Main.dedupDBStore + File.separator + _df.GUID.substring(0, 2) + File.separator + _df.GUID);
 			File _dbf = new File(_directory.getPath() + File.separator + _df.GUID + ".map");
 			File _dbc = new File(_directory.getPath() + File.separator + _df.GUID + ".chk");
-			if (SDFSLogger.isDebug()) {
-				SDFSLogger.getLog().debug("Snap folder is " + _directory);
-				SDFSLogger.getLog().debug("Snap map is " + _dbf);
-				SDFSLogger.getLog().debug("Snap chunk is " + _dbc);
-			}
+			SDFSLogger.getLog().debug("Snap folder is " + _directory);
+			SDFSLogger.getLog().debug("Snap map is " + _dbf);
+			SDFSLogger.getLog().debug("Snap chunk is " + _dbc);
 			bdb.copy(_dbf.getPath(), true);
 
 			snapmf.setDedupFile(_df);
@@ -221,7 +233,7 @@ public DedupFile snapshot(MetaDataDedupFile snapmf, boolean propigate) throws IO
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @seecom.annesam.sdfs.io.AbstractDedupFile#snapshot(com.annesam.sdfs.io.
 	 * MetaDataDedupFile)
 	 */
@@ -318,7 +330,7 @@ public boolean delete(boolean localOnly) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see com.annesam.sdfs.io.AbstractDedupFile#isClosed()
 	 */
 	@Override
@@ -328,7 +340,6 @@ public boolean isClosed() {
 
 	public int writeCache() throws IOException, HashtableFullException {
 		try {
-			if (SDFSLogger.isDebug())
 				SDFSLogger.getLog()
 						.debug("Flushing Cache of for " + mf.getPath() + " of size " + this.writeBuffers.size());
 			this.writeBuffers.invalidateAll();
@@ -413,6 +424,7 @@ public void writeCache(WritableCacheBuffer writeBuffer)
 					boolean allInserted = false;
 					int dups = 0;
 					int retries = 0;
+					int cl = 0;
 					while (!allInserted) {
 
 						try {
@@ -519,6 +531,7 @@ public void commandArchiveException(DataArchivedException e) {
 							}
 							// SDFSLogger.getLog().info("broke data up into " +
 							// fs.size() + " chunks");
+							
 							for (Finger f : fs) {
 								HashLocPair p = new HashLocPair();
 								try {
@@ -530,13 +543,16 @@ public void commandArchiveException(DataArchivedException e) {
 									p.offset = 0;
 									p.nlen = f.len;
 									p.pos = f.start;
-									if (f.hl != null)
+									if (f.hl != null) {
 										p.setDup(!f.hl.getInserted());
+										cl += f.hl.getCompressedLength();
+									}
 									else
 										p.setDup(true);
 									if (p.isDup()) {
 										dups += f.len;
 									}
+									
 									ar.put(p.pos, p);
 								} catch (Exception e) {
 									SDFSLogger.getLog().warn("unable to write object finger", e);
@@ -572,7 +588,7 @@ public void commandArchiveException(DataArchivedException e) {
 					 */
 					mf.getIOMonitor().addVirtualBytesWritten(writeBuffer.capacity(), true);
 					if (writeBuffer.isNewChunk()) {
-						mf.getIOMonitor().addActualBytesWritten(writeBuffer.capacity() - writeBuffer.getDoop(), true);
+						mf.getIOMonitor().addActualBytesWritten(cl, true);
 					} else {
 						int prev = (writeBuffer.capacity() - writeBuffer.getPrevDoop());
 						int nw = writeBuffer.capacity() - writeBuffer.getDoop();
@@ -610,7 +626,7 @@ public void updateExtents(WritableCacheBuffer writeBuffer) throws FileClosedExce
 		 * writeBuffer.getDoop(), true); } else { int prev = (writeBuffer.capacity() -
 		 * writeBuffer.getPrevDoop()); int nw = writeBuffer.capacity() -
 		 * writeBuffer.getDoop();
-		 * 
+		 *
 		 * mf.getIOMonitor().addActualBytesWritten(nw - prev, true); }
 		 * mf.getIOMonitor().addDulicateData((writeBuffer.capacity() -
 		 * writeBuffer.getPrevDoop()), true);
@@ -642,7 +658,8 @@ public void updateMap(DedupChunkInterface writeBuffer, int doop, boolean propiga
 			bdb.put(filePosition, chunk);
 			eventBus.post(new SFileWritten(this, filePosition));
 		} catch (Exception e) {
-			SDFSLogger.getLog().fatal("unable to write " + writeBuffer.getFilePosition() + " updating map " + mf.getPath(),
+			SDFSLogger.getLog().fatal(
+					"unable to write " + writeBuffer.getFilePosition() + " updating map " + mf.getPath(),
 					e);
 			throw new IOException(e);
 		} finally {
@@ -655,18 +672,21 @@ public void updateMap(SparseDataChunk chunk, long filePosition) throws FileClose
 		if (this.closed) {
 			throw new FileClosedException("file already closed");
 		}
-		if(filePosition % Main.CHUNK_LENGTH != 0) {
-			SDFSLogger.getLog().error("file position requested " + filePosition + " is not divisible by " + Main.CHUNK_LENGTH);
-			throw new IOException("file position requested " + filePosition + " is not divisible by " + Main.CHUNK_LENGTH);
+		if (filePosition % Main.CHUNK_LENGTH != 0) {
+			SDFSLogger.getLog()
+					.error("file position requested " + filePosition + " is not divisible by " + Main.CHUNK_LENGTH);
+			throw new IOException(
+					"file position requested " + filePosition + " is not divisible by " + Main.CHUNK_LENGTH);
 		}
 		try {
 
 			this.writeBuffers.invalidate(filePosition);
 			mf.getIOMonitor().addVirtualBytesWritten(chunk.len, true);
-			mf.getIOMonitor().addActualBytesWritten(chunk.len - chunk.getDoop(), true);
+			mf.getIOMonitor().addActualBytesWritten(chunk.getCompressedLength(), true);
 			mf.getIOMonitor().addDulicateData(chunk.getDoop(), true);
 			chunk.setVersion(this.bdb.getVersion());
 			bdb.put(filePosition, chunk);
+			this.dirty = true;
 			eventBus.post(new SFileWritten(this, filePosition));
 		} catch (Exception e) {
 			SDFSLogger.getLog().error("unable to write " + filePosition + " updating map " + mf.getPath(),
@@ -679,7 +699,7 @@ public void updateMap(SparseDataChunk chunk, long filePosition) throws FileClose
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see com.annesam.sdfs.io.AbstractDedupFile#getWriteBuffer(long)
 	 */
 
@@ -774,7 +794,7 @@ private WritableCacheBuffer marshalWriteBuffer(long chunkPos) throws IOException
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see com.annesam.sdfs.io.AbstractDedupFile#getNumberofChunks()
 	 */
 	@Override
@@ -794,7 +814,7 @@ public long getNumberofChunks() throws IOException, FileClosedException {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see com.annesam.sdfs.io.AbstractDedupFile#sync()
 	 */
 	public void sync(boolean force) throws FileClosedException, IOException {
@@ -813,32 +833,28 @@ public void sync(boolean force, boolean propigate) throws FileClosedException, I
 			}
 
 			if (Main.safeSync) {
-				if (SDFSLogger.isDebug())
 					SDFSLogger.getLog().debug("sync " + mf.getPath());
-				long tm = 0;
-				long wt = 0;
-				long st = 0;
-				if (SDFSLogger.isDebug())
-					tm = System.currentTimeMillis();
-				long wsz = this.writeBuffers.size();
-				int fsz = 0;
-				synchronized (flushingBuffers) {
-					fsz = this.flushingBuffers.size();
-				}
+				//long tm = 0;
+				//long wt = 0;
+				//long st = 0;
+				//tm = System.currentTimeMillis();
+				//long wsz = this.writeBuffers.size();
+				//int fsz = 0;
+				//synchronized (flushingBuffers) {
+				//	fsz = this.flushingBuffers.size();
+				//}
 				this.writeCache();
-				if (SDFSLogger.isDebug())
-					wt = System.currentTimeMillis() - tm;
+				//wt = System.currentTimeMillis() - tm;
 				HCServiceProxy.sync();
 				try {
 					this.bdb.sync();
 				} catch (Exception e) {
 
 				}
-				if (SDFSLogger.isDebug())
-					st = System.currentTimeMillis() - tm - wt;
-				if (SDFSLogger.isDebug())
-					SDFSLogger.getLog().debug(
-							"Sync wb=[" + wsz + "] fb=[" + fsz + "] write fush [" + wt + "] bd sync [" + st + "]");
+				//st = System.currentTimeMillis() - tm - wt;
+				/* 				SDFSLogger.getLog().debug(
+						"Sync wb=[" + wsz + "] fb=[" + fsz + "] write fush [" + wt + "] bd sync [" + st + "]");
+						*/
 
 			} /*
 				 * else { this.writeCache(); }
@@ -864,7 +880,7 @@ public void forceRemoteSync() throws IOException {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see com.annesam.sdfs.io.AbstractDedupFile#getChannel()
 	 */
 	@Override
@@ -898,7 +914,7 @@ public DedupFileChannel getChannel(int flags) throws IOException {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see com.annesam.sdfs.io.AbstractDedupFile#unRegisterChannel(com.annesam.sdfs
 	 * .io.DedupFileChannel)
 	 */
@@ -908,18 +924,13 @@ public void unRegisterChannel(DedupFileChannel channel, int flags) {
 			synchronized (channels) {
 				try {
 
-					//if (channel.getFlags() == flags) {
-						this.channels.remove(channel);
-						channel.close(flags);
-						SDFSLogger.getLog().debug("Channel size is " + this.channels.size());
-						if (this.channels.size() == 0) {
-							SDFSLogger.getLog().debug("Closinging " + this.mf.getPath());
-							this.forceClose();
-						}
-					//} else {
-					//	SDFSLogger.getLog().warn("unregister of filechannel for [" + this.mf.getPath()
-					//			+ "] failed because flags mismatch flags [" + flags + "!=" + channel.getFlags() + "]");
-					//}
+					this.channels.remove(channel);
+					channel.close(flags);
+					SDFSLogger.getLog().debug("Channel size is " + this.channels.size());
+					if (this.channels.size() == 0) {
+						SDFSLogger.getLog().debug("Closinging " + this.mf.getPath());
+						this.forceClose();
+					}
 					try {
 						MetaFileStore.getMF(mf.getPath()).sync();
 						eventBus.post(new SFileWritten(this));
@@ -935,7 +946,7 @@ public void unRegisterChannel(DedupFileChannel channel, int flags) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see com.annesam.sdfs.io.AbstractDedupFile#unRegisterChannel(com.annesam.sdfs
 	 * .io.DedupFileChannel)
 	 */
@@ -995,7 +1006,7 @@ public void closeBuffer(WritableCacheBuffer bf) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see com.annesam.sdfs.io.AbstractDedupFile#close()
 	 */
 	@Override
@@ -1034,16 +1045,15 @@ public void forceClose() throws IOException {
 					while (nwb > 0) {
 						twb += nwb;
 						nwb = this.writeCache();
-						if (SDFSLogger.isDebug())
 							SDFSLogger.getLog().debug("Flushing " + nwb + " buffers");
 					}
-					if (SDFSLogger.isDebug())
 						SDFSLogger.getLog().debug("Flushed " + twb + " buffers");
 
 				} catch (Exception e) {
 					SDFSLogger.getLog().error("unable to flush " + this.databasePath, e);
 				}
 				try {
+					SDFSLogger.getLog().debug("Flushing " + this.GUID);
 					HashBlobArchive.sync(this.GUID);
 				} catch (Exception e) {
 					SDFSLogger.getLog().error("unable to sync " + this.GUID, e);
@@ -1088,8 +1098,7 @@ public void forceClose() throws IOException {
 			}
 			if (!Volume.getStorageConnected())
 				throw new IOException("storage offline");
-			if (SDFSLogger.isDebug())
-				SDFSLogger.getLog().debug("Closed [" + mf.getPath() + "]");
+			SDFSLogger.getLog().debug("Closed [" + mf.getPath() + "]");
 		} finally {
 			try {
 				DedupFileStore.removeOpenDedupFile(this.GUID);
@@ -1111,7 +1120,7 @@ public void forceClose() throws IOException {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see com.annesam.sdfs.io.AbstractDedupFile#getGUID()
 	 */
 	@Override
@@ -1121,7 +1130,7 @@ public String getGUID() {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see com.annesam.sdfs.io.AbstractDedupFile#getMetaFile()
 	 */
 	@Override
@@ -1131,7 +1140,7 @@ public MetaDataDedupFile getMetaFile() {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see com.annesam.sdfs.io.AbstractDedupFile#removeLock(com.annesam.sdfs.io.
 	 * DedupFileLock)
 	 */
@@ -1147,7 +1156,7 @@ public void removeLock(DedupFileLock lock, boolean propigate) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @seecom.annesam.sdfs.io.AbstractDedupFile#addLock(com.annesam.sdfs.io.
 	 * DedupFileChannel, long, long, boolean)
 	 */
@@ -1211,7 +1220,7 @@ public void optimize() throws HashtableFullException {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see com.annesam.sdfs.io.AbstractDedupFile#lastModified()
 	 */
 	@Override
@@ -1221,7 +1230,7 @@ public long lastModified() throws IOException {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see com.annesam.sdfs.io.AbstractDedupFile#getHash(long, boolean)
 	 */
 	@Override
@@ -1266,7 +1275,7 @@ public DedupChunk getHash(long location, boolean create) throws IOException, Fil
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see com.annesam.sdfs.io.AbstractDedupFile#removeHash(long)
 	 */
 	@Override
@@ -1322,7 +1331,7 @@ private DedupChunk createNewChunk(long location) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see com.annesam.sdfs.io.AbstractDedupFile#getChuckPosition(long)
 	 */
 	@Override
diff --git a/src/org/opendedup/sdfs/io/Volume.java b/src/org/opendedup/sdfs/io/Volume.java
index 04c983239..f0b4c0669 100644
--- a/src/org/opendedup/sdfs/io/Volume.java
+++ b/src/org/opendedup/sdfs/io/Volume.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com	
+ * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com
  *
  * This file is part of OpenDedupe SDFS.
  *
@@ -192,10 +192,13 @@ public Volume(Element vol, String path) throws IOException {
 		this.path = pathF.getPath();
 		this.connicalPath = pathF.getCanonicalPath();
 		this.capacity = StringUtils.parseSize(vol.getAttribute("capacity"));
-		if (vol.hasAttribute("name"))
+		if (vol.hasAttribute("name")) {
 			this.name = vol.getAttribute("name");
-		else
+			Main.sdfsVolName=this.name;
+		} else {
 			this.name = pathF.getParentFile().getName();
+			Main.sdfsVolName=this.name;
+		}
 		if (vol.hasAttribute("read-timeout-seconds"))
 			Main.readTimeoutSeconds = Integer.parseInt(vol.getAttribute("read-timeout-seconds"));
 		if (vol.hasAttribute("write-timeout-seconds"))
@@ -377,12 +380,28 @@ public boolean isFull() {
 		 * long avail = pathF.getUsableSpace(); if(avail < minFree) {
 		 * SDFSLogger.getLog().warn("Drive is almost full space left is [" + avail +
 		 * "]"); return true;
-		 * 
+		 *
 		 * } if (this.fullPercentage < 0 || this.currentSize == 0) return false; else {
 		 * return (this.currentSize > this.absoluteLength); }
 		 */
 	}
 
+	public boolean isPartitionFull()
+	{
+		long avail = pathF.getUsableSpace();
+
+		if (avail < (1400000000)) {
+			if(!this.volumeFull) {
+			SDFSLogger.getLog().warn(
+					"Volume - Drive is almost full space left is [" + avail + "]");
+
+			}
+			this.volumeFull = true;
+			return true;
+		}
+		return false;
+	}
+
 	public void setPath(String path) {
 		this.path = path;
 	}
@@ -466,7 +485,7 @@ public Element toXMLElement(Document doc) throws ParserConfigurationException {
 		root.setAttribute("path", path);
 		root.setAttribute("name", this.name);
 		root.setAttribute("current-size", Long.toString(this.currentSize.get()));
-		root.setAttribute("capacity", StorageUnit.of(this.capacity).format(this.capacity));
+		root.setAttribute("capacity", StorageUnit.of(this.capacity).number_format(this.capacity));
 		root.setAttribute("maximum-percentage-full", Double.toString(this.fullPercentage));
 
 		root.setAttribute("duplicate-bytes", Long.toString(this.duplicateBytes.get()));
diff --git a/src/org/opendedup/sdfs/io/VolumeConfigWriterThread.java b/src/org/opendedup/sdfs/io/VolumeConfigWriterThread.java
index 14e53b14d..db57b6cbe 100644
--- a/src/org/opendedup/sdfs/io/VolumeConfigWriterThread.java
+++ b/src/org/opendedup/sdfs/io/VolumeConfigWriterThread.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com	
+ * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com
  *
  * This file is part of OpenDedupe SDFS.
  *
@@ -54,9 +54,8 @@ public void run() {
 				writeConfig();
 				Thread.sleep(duration);
 			} catch (Exception e) {
-				if (SDFSLogger.isDebug())
-					SDFSLogger.getLog().debug("Unable to write volume config.",
-							e);
+				SDFSLogger.getLog().debug("Unable to write volume config.",
+						e);
 				this.closed = true;
 			}
 		}
diff --git a/src/org/opendedup/sdfs/io/VolumeFullThread.java b/src/org/opendedup/sdfs/io/VolumeFullThread.java
index 858429061..161eb0653 100644
--- a/src/org/opendedup/sdfs/io/VolumeFullThread.java
+++ b/src/org/opendedup/sdfs/io/VolumeFullThread.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com	
+ * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com
  *
  * This file is part of OpenDedupe SDFS.
  *
@@ -44,8 +44,7 @@ public void run() {
 				Thread.sleep(duration);
 				vol.setVolumeFull(this.isFull());
 			} catch (Exception e) {
-				if (SDFSLogger.isDebug())
-					SDFSLogger.getLog().debug("Unable to check if full.", e);
+				SDFSLogger.getLog().debug("Unable to check if full.", e);
 				this.closed = true;
 			}
 		}
@@ -77,66 +76,66 @@ public void createDiskFillEvent(String msg) {
 	public synchronized boolean isFull() throws Exception {
 		long avail = vol.pathF.getUsableSpace();
 		if (avail < (offset)) {
-			if(!full) {
-			SDFSLogger.getLog().warn(
-					"Drive is almost full space left is [" + avail + "]");
-			this.createDiskFillEvent("Drive is almost full space left is ["
-					+ avail + "]");
-			
+			if (!full) {
+				SDFSLogger.getLog().warn(
+						"Drive is almost full space left is [" + avail + "]");
+				this.createDiskFillEvent("Drive is almost full space left is ["
+						+ avail + "]");
+
 			}
 			this.full = true;
 			return true;
 		}
 		if ((vol.getCurrentSize() + offset) >= vol.getCapacity()) {
-			if(!full) {
-			SDFSLogger.getLog().warn(
-					"Drive is almost full. Current Size ["
-							+ vol.getCurrentSize() + "] and capacity is ["
-							+ vol.getCapacity() + "]");
-			this.createDiskFillEvent("Drive is almost full. Current Size ["
-					+ vol.getCurrentSize() + "] and capacity is ["
-					+ vol.getCapacity() + "]");
+			if (!full) {
+				SDFSLogger.getLog().warn(
+						"Drive is almost full. Current Size ["
+								+ vol.getCurrentSize() + "] and capacity is ["
+								+ vol.getCapacity() + "]");
+				this.createDiskFillEvent("Drive is almost full. Current Size ["
+						+ vol.getCurrentSize() + "] and capacity is ["
+						+ vol.getCapacity() + "]");
 			}
 			full = true;
 			return true;
-		} else if (!Main.ignoreDSEHTSize &&(HCServiceProxy.getDSESize() + offset) >= HCServiceProxy
+		} else if (!Main.ignoreDSEHTSize && (HCServiceProxy.getDSESize() + offset) >= HCServiceProxy
 				.getDSEMaxSize()) {
-			if(!full) {
-			SDFSLogger.getLog().warn(
-					"Drive is almost full. DSE Size ["
-							+ HCServiceProxy.getDSESize()
-							+ "] and DSE Max Size is ["
-							+ HCServiceProxy.getDSEMaxSize() + "]");
+			if (!full) {
+				SDFSLogger.getLog().warn(
+						"Drive is almost full. DSE Size ["
+								+ HCServiceProxy.getDSESize()
+								+ "] and DSE Max Size is ["
+								+ HCServiceProxy.getDSEMaxSize() + "]");
 
-			this.createDiskFillEvent("Drive is almost full. DSE Size ["
-					+ HCServiceProxy.getDSESize() + "] and DSE Max Size is ["
-					+ HCServiceProxy.getDSEMaxSize() + "]");
+				this.createDiskFillEvent("Drive is almost full. DSE Size ["
+						+ HCServiceProxy.getDSESize() + "] and DSE Max Size is ["
+						+ HCServiceProxy.getDSEMaxSize() + "]");
 			}
 			full = true;
 			return true;
 		} else if ((HCServiceProxy.getSize() + 10000) >= HCServiceProxy
 				.getMaxSize()) {
-			if(!full) {
-			SDFSLogger.getLog().warn(
-					"Drive is almost full. DSE HashMap Size ["
-							+ HCServiceProxy.getSize()
-							+ "] and DSE HashMap Max Size is ["
-							+ HCServiceProxy.getMaxSize() + "]");
-			this.createDiskFillEvent("Drive is almost full. DSE HashMap Size ["
-					+ HCServiceProxy.getSize()
-					+ "] and DSE HashMap Max Size is ["
-					+ HCServiceProxy.getMaxSize() + "]");
+			if (!full) {
+				SDFSLogger.getLog().warn(
+						"Drive is almost full. DSE HashMap Size ["
+								+ HCServiceProxy.getSize()
+								+ "] and DSE HashMap Max Size is ["
+								+ HCServiceProxy.getMaxSize() + "]");
+				this.createDiskFillEvent("Drive is almost full. DSE HashMap Size ["
+						+ HCServiceProxy.getSize()
+						+ "] and DSE HashMap Max Size is ["
+						+ HCServiceProxy.getMaxSize() + "]");
 			}
 			full = true;
 			return true;
 		} else {
-			if(this.full) {
+			if (this.full) {
 				SDFSLogger.getLog().warn(
 						"Drive is no longer full");
 				this.createDiskFillEvent("Drive is no longer full");
 			}
 			this.full = false;
-		
+
 			return false;
 		}
 	}
diff --git a/src/org/opendedup/sdfs/io/WritableCacheBuffer.java b/src/org/opendedup/sdfs/io/WritableCacheBuffer.java
index e7ce5b6a7..f7ef039b8 100755
--- a/src/org/opendedup/sdfs/io/WritableCacheBuffer.java
+++ b/src/org/opendedup/sdfs/io/WritableCacheBuffer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com	
+ * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com
  *
  * This file is part of OpenDedupe SDFS.
  *
@@ -52,7 +52,7 @@
 import com.google.common.primitives.Longs;
 
 /**
- * 
+ *
  * @author annesam WritableCacheBuffer is used to store written data for later
  *         writing and reading by the DedupFile. WritableCacheBuffers are
  *         evicted from the file system based LRU. When a writable cache buffer
@@ -61,7 +61,7 @@
 public class WritableCacheBuffer implements DedupChunkInterface, Runnable {
 
 	private ByteBuffer buf = null;
-	private byte [] bar = null;
+	private byte[] bar = null;
 	private boolean dirty = false;
 
 	private long endPosition = 0;
@@ -82,7 +82,7 @@ public class WritableCacheBuffer implements DedupChunkInterface, Runnable {
 	private boolean reconstructed;
 	private boolean hlAdded = false;
 	private boolean direct = false;
-	protected ReentrantLock lobj = new ReentrantLock() ;
+	protected ReentrantLock lobj = new ReentrantLock();
 	private TreeMap ar = new TreeMap();
 	private TreeMap _ar = null;
 	int sz;
@@ -95,10 +95,10 @@ public class WritableCacheBuffer implements DedupChunkInterface, Runnable {
 	// private static AtomicLong wbsz= new AtomicLong();
 	static {
 		SDFSLogger.getLog().info("blankHash=" + StringUtils.getHexString(bk));
-		
-			worksQueue = new SynchronousQueue();
-			executor = new ThreadPoolExecutor(Main.writeThreads, Main.writeThreads, 0L, TimeUnit.SECONDS, worksQueue,
-					new ThreadPoolExecutor.CallerRunsPolicy());
+
+		worksQueue = new SynchronousQueue();
+		executor = new ThreadPoolExecutor(Main.writeThreads, Main.writeThreads, 0L, TimeUnit.SECONDS, worksQueue,
+				new ThreadPoolExecutor.CallerRunsPolicy());
 		lworksQueue = new SynchronousQueue();
 		lexecutor = new ThreadPoolExecutor(Main.writeThreads, Main.writeThreads, 0L, TimeUnit.SECONDS, lworksQueue,
 				new ThreadPoolExecutor.CallerRunsPolicy());
@@ -125,7 +125,7 @@ public WritableCacheBuffer(long startPos, int length, SparseDedupFile df, TreeMa
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.opendedup.sdfs.io.CacheBufferInterface2#getBytesWritten()
 	 */
 	@Override
@@ -135,7 +135,7 @@ public int getBytesWritten() {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.opendedup.sdfs.io.CacheBufferInterface2#getDedupFile()
 	 */
 	@Override
@@ -162,7 +162,7 @@ public WritableCacheBuffer(DedupChunkInterface dk, DedupFile df) throws IOExcept
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.opendedup.sdfs.io.CacheBufferInterface2#sync()
 	 */
 	@Override
@@ -172,9 +172,9 @@ public boolean sync() throws IOException {
 	}
 
 	public byte[] getReadChunk(int startPos, int len) throws IOException, BufferClosedException, DataArchivedException {
-		if (SDFSLogger.isDebug())
-			SDFSLogger.getLog().debug("reading " + df.getMetaFile().getPath() + " df=" + df.getGUID() + " fpos="
-					+ this.position + " start=" + startPos + " len=" + len);
+
+		SDFSLogger.getLog().debug("reading " + df.getMetaFile().getPath() + " df=" + df.getGUID() + " fpos="
+				+ this.position + " start=" + startPos + " len=" + len);
 		lobj.lock();
 		try {
 			if (this.closed)
@@ -216,21 +216,19 @@ public byte[] getReadChunk(int startPos, int len) throws IOException, BufferClos
 
 	private byte[] readChunk(int startPos, int len) throws IOException, BufferClosedException, DataArchivedException {
 		if (this.flushing) {
-			if (SDFSLogger.isDebug())
-				SDFSLogger.getLog().debug("cannot read buffer at pos " + this.getFilePosition() + " already flushing");
+			SDFSLogger.getLog().debug("cannot read buffer at pos " + this.getFilePosition() + " already flushing");
 			throw new BufferClosedException("Buffer Closed");
 
 		}
 		if (this.closed) {
-			if (SDFSLogger.isDebug())
-				SDFSLogger.getLog().debug("cannot read buffer at pos " + this.getFilePosition() + " closed");
+			SDFSLogger.getLog().debug("cannot read buffer at pos " + this.getFilePosition() + " closed");
 			throw new BufferClosedException("Buffer Closed");
 		}
-		if(this.accelBuffer != null) {
-			if(startPos >= this.accelBuffPos && (startPos + len) <= this.accelBuffEp) {
+		if (this.accelBuffer != null) {
+			if (startPos >= this.accelBuffPos && (startPos + len) <= this.accelBuffEp) {
 				ByteBuffer _buf = ByteBuffer.wrap(this.accelBuffer.toByteArray());
 				int sp = this.accelBuffPos - startPos;
-				byte [] _b = new byte[len];
+				byte[] _b = new byte[len];
 				_buf.position(sp);
 				_buf.get(_b);
 				return _b;
@@ -379,13 +377,13 @@ public void commandArchiveException(DataArchivedException e) {
 						} else {
 							try {
 								buf.position(sh.pos);
-								if(sh.nlen > sh.ck.length)
+								if (sh.nlen > sh.ck.length)
 									buf.put(sh.ck, sh.offset, sh.ck.length);
 								else
 									buf.put(sh.ck, sh.offset, sh.nlen);
 
 							} catch (Exception e) {
-								
+
 								String hp = StringUtils.getHexString(sh.hash);
 								SDFSLogger.getLog()
 										.error("hash=" + hp + " pos = " + this.position + " ck nlen=" + sh.nlen
@@ -413,7 +411,7 @@ public void commandArchiveException(DataArchivedException e) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.opendedup.sdfs.io.CacheBufferInterface2#capacity()
 	 */
 	@Override
@@ -439,22 +437,22 @@ public boolean setAR(TreeMap al) {
 				ct.put(e.getValue(), val);
 			}
 			for (Entry e : ct.entrySet()) {
-				long archiveId=Longs.fromByteArray(e.getKey().hashloc);
+				long archiveId = Longs.fromByteArray(e.getKey().hashloc);
 				long ci = DedupFileStore.addRef(e.getKey().hash, archiveId, e.getValue());
-				if(ci != -1 && archiveId != ci)
+				if (ci != -1 && archiveId != ci)
 					e.getKey().hashloc = Longs.toByteArray(ci);
-				if(ci == -1) {
+				if (ci == -1) {
 					allInserted = false;
 				}
 			}
 		} catch (Exception e) {
 			SDFSLogger.getLog().warn("unable to remove reference", e);
 		}
-		if(allInserted) {
+		if (allInserted) {
 			this.ar = al;
 		}
 		return allInserted;
-		
+
 	}
 
 	private void reReference() {
@@ -484,7 +482,7 @@ private void reReference() {
 				for (Entry e : ct.entrySet()) {
 					long archiveId = Longs.fromByteArray(e.getKey().hashloc);
 					long ci = DedupFileStore.addRef(e.getKey().hash, archiveId, e.getValue());
-					if(ci != -1 && ci != archiveId ) {
+					if (ci != -1 && ci != archiveId) {
 						e.getKey().hashloc = Longs.toByteArray(ci);
 					}
 				}
@@ -496,7 +494,7 @@ private void reReference() {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.opendedup.sdfs.io.CacheBufferInterface2#getEndPosition()
 	 */
 	@Override
@@ -517,20 +515,22 @@ private void writeBlock(byte[] b, int pos) throws IOException, DataArchivedExcep
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.opendedup.sdfs.io.CacheBufferInterface2#write(byte[], int)
 	 */
 
 	@Override
 	public void write(byte[] b, int pos) throws BufferClosedException, IOException, DataArchivedException {
-		if (SDFSLogger.isDebug()) {
-			SDFSLogger.getLog().debug("writing " + df.getMetaFile().getPath() + "df=" + df.getGUID() + "fpos="
-					+ this.position + " pos=" + pos + " len=" + b.length);
-			if (df.getMetaFile().getPath().endsWith(".vmx") || df.getMetaFile().getPath().endsWith(".vmx~")) {
-				SDFSLogger.getLog()
-						.debug("###### In wb Text of VMX=" + df.getMetaFile().getPath() + "=" + new String(b, "UTF-8"));
-			}
-		}
+		SDFSLogger.getLog().debug("writing " + df.getMetaFile().getPath() + "df=" + df.getGUID() + "fpos="
+				+ this.position + " pos=" + pos + " len=" + b.length);
+		/*
+		 * if (df.getMetaFile().getPath().endsWith(".vmx") ||
+		 * df.getMetaFile().getPath().endsWith(".vmx~")) {
+		 * SDFSLogger.getLog()
+		 * .debug("###### In wb Text of VMX=" + df.getMetaFile().getPath() + "=" + new
+		 * String(b, "UTF-8"));
+		 * }
+		 */
 		lobj.lock();
 		try {
 			if (this.closed)
@@ -547,9 +547,8 @@ public void write(byte[] b, int pos) throws BufferClosedException, IOException,
 			} else {
 
 				if (this.buf == null && this.reconstructed && HashFunctionPool.max_hash_cluster > 1) {
-					
-					
-						this.wm(b, pos);
+
+					this.wm(b, pos);
 				} else {
 					// SDFSLogger.getLog().info("writing at " + pos + " recon="
 					// + this.reconstructed + " sz=" + this.ar.size());
@@ -598,7 +597,7 @@ public void copyExtent(HashLocPair p) throws IOException, BufferClosedException,
 				try {
 					this.reconstructed = true;
 					this.hlAdded = true;
-					
+
 					SparseDataChunk.insertHashLocPair(ar, p);
 				} catch (Throwable e) {
 					df.errOccured = true;
@@ -610,18 +609,19 @@ public void copyExtent(HashLocPair p) throws IOException, BufferClosedException,
 			this.lobj.unlock();
 		}
 	}
-	
+
 	ByteArrayDataOutput accelBuffer = null;
 	int accelBuffPos = 0;
 	int accelBuffEp = 0;
+
 	private void wm(byte[] b, int pos) throws IOException {
 		this.reconstructed = true;
-		if(accelBuffer == null) {
+		if (accelBuffer == null) {
 			accelBuffPos = pos;
 			accelBuffEp = accelBuffPos + b.length;
 			accelBuffer = ByteStreams.newDataOutput();
 			accelBuffer.write(b);
-		} else if(accelBuffEp == pos) {
+		} else if (accelBuffEp == pos) {
 			accelBuffer.write(b);
 			accelBuffEp = accelBuffPos + b.length;
 		} else {
@@ -632,15 +632,15 @@ private void wm(byte[] b, int pos) throws IOException {
 			accelBuffer.write(b);
 		}
 	}
-	
+
 	public void writeAccelBuffer() throws IOException {
-		if(accelBuffer == null)
+		if (accelBuffer == null)
 			return;
 		int opos = accelBuffPos;
 		AbstractHashEngine hc = (AbstractHashEngine) HashFunctionPool.borrowObject();
-		byte [] b = accelBuffer.toByteArray();
+		byte[] b = accelBuffer.toByteArray();
 		try {
-			List fs = hc.getChunks(b,this.df.getGUID());
+			List fs = hc.getChunks(b, this.df.getGUID());
 			AsyncChunkWriteActionListener l = new AsyncChunkWriteActionListener() {
 
 				@Override
@@ -734,10 +734,10 @@ public void commandArchiveException(DataArchivedException e) {
 					p.hashloc = f.hl.getHashLocs();
 					p.len = f.len;
 					p.offset = 0;
-					if((ep+ f.len) <= Main.CHUNK_LENGTH)
+					if ((ep + f.len) <= Main.CHUNK_LENGTH)
 						p.nlen = f.len;
 					else
-						p.nlen = Main.CHUNK_LENGTH -ep;
+						p.nlen = Main.CHUNK_LENGTH - ep;
 					p.pos = ep;
 					p.inserted = true;
 					ep += f.len;
@@ -745,28 +745,29 @@ public void commandArchiveException(DataArchivedException e) {
 					if (!f.hl.getInserted())
 						dups = f.len;
 					df.mf.getIOMonitor().addVirtualBytesWritten(f.len, true);
-					if(dups >0)
-						df.mf.getIOMonitor().addActualBytesWritten(f.len, true);
+					if (dups > 0)
+						df.mf.getIOMonitor().addActualBytesWritten(f.hl.getCompressedLength(), true);
 					else
 						df.mf.getIOMonitor().addDulicateData(dups, true);
 					this.prevDoop += dups;
 					SparseDataChunk.insertHashLocPair(ar, p);
 				} catch (Throwable e) {
-					SDFSLogger.getLog().warn("unable to write object finger pos=" + opos + " len=" + b.length , e);
+					SDFSLogger.getLog().warn("unable to write object finger pos=" + opos + " len=" + b.length, e);
 					throw e;
 					// SDFSLogger.getLog().info("this chunk size is "
 					// + f.chunk.length);
 				}
 			}
-			if(this.ar.size() >= LongByteArrayMap.MAX_ELEMENTS_PER_AR) {
-				
-					SDFSLogger.getLog()
-							.info("write accelerator Chuck Array Size greater than " + LongByteArrayMap.MAX_ELEMENTS_PER_AR
-									+ " at " + (this.getFilePosition() + accelBuffPos) + " for file " + this.df.mf.getPath());
-					this.initBuffer();
-					this.dirty=true;
-					
-			}else {
+			if (this.ar.size() >= LongByteArrayMap.MAX_ELEMENTS_PER_AR) {
+
+				SDFSLogger.getLog()
+						.info("write accelerator Chuck Array Size greater than " + LongByteArrayMap.MAX_ELEMENTS_PER_AR
+								+ " at " + (this.getFilePosition() + accelBuffPos) + " for file "
+								+ this.df.mf.getPath());
+				this.initBuffer();
+				this.dirty = true;
+
+			} else {
 				this.hlAdded = true;
 			}
 			accelBuffer = null;
@@ -781,7 +782,7 @@ public void commandArchiveException(DataArchivedException e) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.opendedup.sdfs.io.CacheBufferInterface2#truncate(int)
 	 */
 	@Override
@@ -801,7 +802,7 @@ public void truncate(int len) throws BufferClosedException {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.opendedup.sdfs.io.CacheBufferInterface2#isDirty()
 	 */
 	@Override
@@ -816,7 +817,7 @@ public boolean isDirty() {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.opendedup.sdfs.io.CacheBufferInterface2#setDirty(boolean)
 	 */
 	@Override
@@ -831,7 +832,7 @@ public void setDirty(boolean dirty) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.opendedup.sdfs.io.CacheBufferInterface2#toString()
 	 */
 	@Override
@@ -841,7 +842,7 @@ public String toString() {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.opendedup.sdfs.io.CacheBufferInterface2#open()
 	 */
 	@Override
@@ -856,7 +857,7 @@ public void open() {
 		} catch (Exception e) {
 			SDFSLogger.getLog().fatal("Error while opening", e);
 			throw new IllegalArgumentException("error");
-		}finally {
+		} finally {
 			this.lobj.unlock();
 		}
 
@@ -869,7 +870,6 @@ public void flush() throws BufferClosedException {
 		lobj.lock();
 		try {
 			if (this.flushing) {
-				if (SDFSLogger.isDebug())
 					SDFSLogger.getLog()
 							.debug("cannot flush buffer at pos " + this.getFilePosition() + " already flushing");
 				throw new BufferClosedException("Buffer Closed");
@@ -878,15 +878,14 @@ public void flush() throws BufferClosedException {
 			if (this.closed) {
 				df.removeBufferFromFlush(this);
 				df.removeOpenBuffer(this);
-				if (SDFSLogger.isDebug())
 					SDFSLogger.getLog().debug("cannot flush buffer at pos " + this.getFilePosition() + " closed");
 				throw new BufferClosedException("Buffer Closed");
-				
+
 			}
 			this.flushing = true;
 			if (this.dirty || this.isHlAdded()) {
-					this.df.putBufferIntoFlush(this);
-					lexecutor.execute(this);
+				this.df.putBufferIntoFlush(this);
+				lexecutor.execute(this);
 			} else {
 				// wbsz.decrementAndGet();
 				df.removeOpenBuffer(this);
@@ -912,7 +911,7 @@ public boolean isClosed() {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.opendedup.sdfs.io.CacheBufferInterface2#close()
 	 */
 	@Override
@@ -920,22 +919,19 @@ public void close() throws IOException {
 		// long ksz = wbsz.decrementAndGet();
 		lobj.lock();
 		try {
-			
 
 			if (!this.flushing) {
 				df.removeOpenBuffer(this);
 				df.removeBufferFromFlush(this);
-				if (SDFSLogger.isDebug())
 					SDFSLogger.getLog().debug("#### " + this.getFilePosition() + " not flushing ");
 				return;
 			}
 			try {
-				if(accelBuffer != null) {
+				if (accelBuffer != null) {
 					this.writeAccelBuffer();
 				}
 				if (this.closed) {
-					
-					if (SDFSLogger.isDebug())
+
 						SDFSLogger.getLog().debug(this.getFilePosition() + " already closed");
 				} else if (this.dirty || this.hlAdded) {
 					if (hlAdded) {
@@ -990,10 +986,8 @@ public boolean isBatchProcessed() {
 	public void endClose() throws IOException {
 		try {
 			if (!this.flushing) {
-				if (SDFSLogger.isDebug())
 					SDFSLogger.getLog().debug("####" + this.getFilePosition() + " not flushing");
 			} else if (this.closed) {
-				if (SDFSLogger.isDebug())
 					SDFSLogger.getLog().debug(this.getFilePosition() + " already closed");
 			} else {
 
@@ -1013,12 +1007,10 @@ public void endClose() throws IOException {
 	public byte[] getFlushedBuffer()
 			throws BufferClosedException, IOException, InterruptedException, DataArchivedException {
 		if (this.closed) {
-			if (SDFSLogger.isDebug())
 				SDFSLogger.getLog().debug(this.getFilePosition() + " already closed");
 			throw new BufferClosedException("Buffer Closed");
 		}
 		if (!this.flushing) {
-			if (SDFSLogger.isDebug())
 				SDFSLogger.getLog().debug(this.getFilePosition() + " not flushed");
 			throw new BufferClosedException("Buffer not flushed");
 		}
@@ -1031,7 +1023,7 @@ public byte[] getFlushedBuffer()
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.opendedup.sdfs.io.CacheBufferInterface2#persist()
 	 */
 	@Override
@@ -1051,7 +1043,7 @@ public void persist() {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.opendedup.sdfs.io.CacheBufferInterface2#destroy()
 	 */
 	@Override
@@ -1061,7 +1053,7 @@ public void destroy() {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.opendedup.sdfs.io.CacheBufferInterface2#isPrevDoop()
 	 */
 	@Override
@@ -1071,7 +1063,7 @@ public int getPrevDoop() {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.opendedup.sdfs.io.CacheBufferInterface2#setPrevDoop(boolean)
 	 */
 	@Override
@@ -1081,7 +1073,7 @@ public void setPrevDoop(int prevDoop) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.opendedup.sdfs.io.CacheBufferInterface2#hashCode()
 	 */
 	@Override
@@ -1092,7 +1084,7 @@ public int hashCode() {
 			try {
 				this.initBuffer();
 			} catch (IOException | InterruptedException | DataArchivedException e) {
-				SDFSLogger.getLog().warn("error getting cache",e);
+				SDFSLogger.getLog().warn("error getting cache", e);
 			}
 			return hf.hashBytes(buf.array()).asInt();
 		} finally {
@@ -1102,7 +1094,7 @@ public int hashCode() {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.opendedup.sdfs.io.CacheBufferInterface2#getLength()
 	 */
 	@Override
@@ -1112,7 +1104,7 @@ public int getLength() {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.opendedup.sdfs.io.CacheBufferInterface2#getFilePosition()
 	 */
 	@Override
@@ -1122,7 +1114,7 @@ public long getFilePosition() {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.opendedup.sdfs.io.CacheBufferInterface2#setLength(int)
 	 */
 	@Override
@@ -1133,7 +1125,7 @@ public void setLength(int length) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.opendedup.sdfs.io.CacheBufferInterface2#isNewChunk()
 	 */
 	@Override
@@ -1143,7 +1135,7 @@ public boolean isNewChunk() {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.opendedup.sdfs.io.CacheBufferInterface2#setNewChunk(boolean)
 	 */
 	@Override
@@ -1154,7 +1146,7 @@ public void setNewChunk(boolean newChunk) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.opendedup.sdfs.io.CacheBufferInterface2#setWritable(boolean)
 	 */
 	@Override
@@ -1165,7 +1157,7 @@ public void setWritable(boolean writable) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.opendedup.sdfs.io.CacheBufferInterface2#isWritable()
 	 */
 	@Override
@@ -1175,7 +1167,7 @@ public boolean isWritable() {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.opendedup.sdfs.io.CacheBufferInterface2#setDoop(boolean)
 	 */
 	@Override
@@ -1185,7 +1177,7 @@ public void setDoop(int doop) {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.opendedup.sdfs.io.CacheBufferInterface2#isDoop()
 	 */
 	@Override
@@ -1212,11 +1204,11 @@ public BlockPolicy() {
 		/**
 		 * Puts the Runnable to the blocking queue, effectively blocking the delegating
 		 * thread until space is available.
-		 * 
+		 *
 		 * @param r
-		 *            the runnable task requested to be executed
+		 *          the runnable task requested to be executed
 		 * @param e
-		 *            the executor attempting to execute this task
+		 *          the executor attempting to execute this task
 		 */
 		public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
 			try {
diff --git a/src/org/opendedup/sdfs/mgmt/GetCloudFile.java b/src/org/opendedup/sdfs/mgmt/GetCloudFile.java
index e89995bab..ae779d36d 100644
--- a/src/org/opendedup/sdfs/mgmt/GetCloudFile.java
+++ b/src/org/opendedup/sdfs/mgmt/GetCloudFile.java
@@ -15,6 +15,7 @@
 import org.opendedup.collections.LongKeyValue;
 import org.opendedup.collections.SparseDataChunk;
 import org.opendedup.logging.SDFSLogger;
+import org.opendedup.rabin.utils.StringUtils;
 import org.opendedup.sdfs.Main;
 import org.opendedup.sdfs.filestore.ChunkData;
 import org.opendedup.sdfs.filestore.HashBlobArchive;
@@ -53,7 +54,7 @@ public Element getResult(String file, String dstfile, boolean overwrite, String
 					root.setAttribute("action", "ignored");
 					fevt.endEvent("ignoring file");
 					return (Element) root.cloneNode(true);
-					
+
 				} catch (Exception e) {
 					fevt.endEvent("unable to download file " + file, SDFSEvent.ERROR);
 					throw new IOException(e);
@@ -102,7 +103,7 @@ private void downloadFile() throws IOException {
 				if (f.exists()) {
 					if (df == null) {
 						MetaFileStore.removeMetaFile(new File(Main.volume.getPath() + File.separator + sfile).getPath(),
-								true, true,false);
+								true, true, false);
 						SDFSLogger.getLog()
 								.debug("Removed " + new File(Main.volume.getPath() + File.separator + sfile).getPath());
 					}
@@ -112,7 +113,7 @@ private void downloadFile() throws IOException {
 					} catch (Exception e) {
 						SDFSLogger.getLog().warn("File [" + f.getPath() + "] retention lock could not be removed ", e);
 					}
-					boolean removed = MetaFileStore.removeMetaFile(f.getPath(), true, true,false);
+					boolean removed = MetaFileStore.removeMetaFile(f.getPath(), true, true, false);
 					SDFSLogger.getLog().info("removed " + f.getPath() + " success=" + removed);
 
 					if (removed) {
@@ -130,19 +131,13 @@ private void downloadFile() throws IOException {
 				SDFSLogger.getLog().debug("downloaded " + sfile);
 				fevt.shortMsg = "Downloading Map Metadata for [" + sfile + "]";
 				SDFSLogger.getLog().debug("downloading ddb " + _mf.getDfGuid());
-				if(_mf.getDfGuid() == null) {
+				if (_mf.getDfGuid() == null) {
 					throw new IOException("File " + sfile + " has no data");
 				}
 				LongByteArrayMap mp = FileReplicationService.getDDB(_mf.getDfGuid());
 				mp.setIndexed(false);
 				mf = MetaFileStore.getMF(_mf.getPath());
-				SDFSLogger.getLog().info("downloaded ddb " + mf.getDfGuid());
-				if (df != null) {
-					sdf = mf.snapshot(df.getPath(), overwrite, fevt);
-				} else {
-					SDFSLogger.getLog().info("checking dedupe file " + sfile + " sdd=" + mf.getDfGuid());
 
-				}
 				fevt.addCount(1);
 
 			}
@@ -160,6 +155,32 @@ private void downloadFile() throws IOException {
 		}
 	}
 
+	private void snapshotFile(SDFSEvent fevt) throws IOException {
+		try {
+			File df = null;
+			if (dstfile != null)
+				df = new File(Main.volume.getPath() + File.separator + dstfile);
+			if (df != null) {
+				sdf = mf.snapshot(df.getPath(), overwrite, fevt);
+			} else {
+				SDFSLogger.getLog().info("checking dedupe file " + sfile + " sdd=" + mf.getDfGuid());
+
+			}
+			fevt.addCount(1);
+		} catch (IOException e) {
+
+			if (sdf != null) {
+				sdf.deleteStub(true);
+			}
+			throw e;
+		} catch (Exception e) {
+			SDFSLogger.getLog().error("unable to get file " + sfile, e);
+			fevt.endEvent("unable to get file " + sfile, SDFSEvent.ERROR);
+			throw new IOException("request to fetch attributes failed because " + e.toString());
+
+		}
+	}
+
 	private void checkDedupFile(SDFSEvent fevt) throws IOException {
 
 		fevt.shortMsg = "Importing hashes for file";
@@ -189,13 +210,13 @@ private void checkDedupFile(SDFSEvent fevt) throws IOException {
 					InsertRecord ir = HCServiceProxy.getHashesMap().put(cm, false);
 					mf.getIOMonitor().addVirtualBytesWritten(p.nlen, false);
 					if (ir.getInserted()) {
-						mf.getIOMonitor().addActualBytesWritten(p.nlen, false);
+						mf.getIOMonitor().addActualBytesWritten(ir.getCompressedLength(), false);
 						blks.add(Longs.fromByteArray(ir.getHashLocs()));
 					} else {
 						mf.getIOMonitor().addDulicateData(p.nlen, false);
 						if (!Arrays.equals(p.hashloc, ir.getHashLocs())) {
-							SDFSLogger.getLog().debug("importing " + Longs.fromByteArray( ir.getHashLocs()) + " "
-							 +Longs.fromByteArray( p.hashloc) );
+							SDFSLogger.getLog().debug("importing " + Longs.fromByteArray(ir.getHashLocs()) + " "
+									+ Longs.fromByteArray(p.hashloc));
 							p.hashloc = ir.getHashLocs();
 							blks.add(Longs.fromByteArray(ir.getHashLocs()));
 							dirty = true;
@@ -233,6 +254,7 @@ public void run() {
 			synchronized (obj) {
 				this.downloadFile();
 				this.checkDedupFile(fevt);
+				this.snapshotFile(fevt);
 				fevt.endEvent("imported [" + mf.getPath() + "]");
 			}
 		} catch (Exception e) {
@@ -242,8 +264,8 @@ public void run() {
 			try {
 				File f = new File(Main.volume.getPath() + File.separator + sfile);
 				if (f.exists()) {
-					
-						f.delete();
+
+					f.delete();
 				}
 			} catch (Exception e1) {
 
diff --git a/src/org/opendedup/sdfs/mgmt/GetRaidVolumes.java b/src/org/opendedup/sdfs/mgmt/GetRaidVolumes.java
deleted file mode 100644
index 44aee630f..000000000
--- a/src/org/opendedup/sdfs/mgmt/GetRaidVolumes.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.opendedup.sdfs.mgmt;
-
-import java.io.IOException;
-import java.util.List;
-
-import org.opendedup.logging.SDFSLogger;
-import org.opendedup.sdfs.filestore.cloud.CloudRaidStore;
-import org.opendedup.sdfs.filestore.cloud.CloudRaidStore.BucketStats;
-import org.opendedup.util.XMLUtils;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-public class GetRaidVolumes {
-
-	public Element getResult() throws IOException {
-		try {
-			Document doc = XMLUtils.getXMLDoc("buckets");
-			Element root = doc.getDocumentElement();
-			List l = CloudRaidStore.getBucketSizes();
-			if(l != null) {
-				for(BucketStats vl : l) {
-					Element el = doc.createElement("bucket");
-					el.setAttribute("id", Byte.toString(vl.id));
-					el.setAttribute("size", Long.toString(vl.usage.get()));
-					el.setAttribute("capacity", Long.toString(vl.capacity.get()));
-					el.setAttribute("available", Boolean.toString(vl.connected));
-					root.appendChild(el);
-				}
-			}
-			return (Element) root.cloneNode(true);
-		} catch (Exception e) {
-			SDFSLogger.getLog().error(
-					"unable to fulfill request", e);
-			throw new IOException("request to fetch attributes failed because "
-					+ e.toString());
-		}
-	}
-
-}
diff --git a/src/org/opendedup/sdfs/mgmt/MgmtWebServer.java b/src/org/opendedup/sdfs/mgmt/MgmtWebServer.java
index f562a69d5..a0303ddb2 100644
--- a/src/org/opendedup/sdfs/mgmt/MgmtWebServer.java
+++ b/src/org/opendedup/sdfs/mgmt/MgmtWebServer.java
@@ -1,7 +1,10 @@
 package org.opendedup.sdfs.mgmt;
 
+import java.io.BufferedReader;
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.IOException;
+import java.io.InputStreamReader;
 import java.util.concurrent.TimeoutException;
 
 import org.opendedup.logging.SDFSLogger;
@@ -10,15 +13,16 @@
 import org.opendedup.sdfs.mgmt.mqtt.MetaDataPush;
 import org.opendedup.util.FindOpenPort;
 import org.opendedup.util.KeyGenerator;
+import org.opendedup.util.OSValidator;
 
 public class MgmtWebServer {
 	private static IOServer grpcServer = null;
 
-	public static void start(boolean useSSL) throws IOException, InterruptedException {
+	public static void start(boolean useSSL) throws Exception {
 
 		if (Main.sdfsCliEnabled) {
 
-			if (useSSL && Main.jarFilePath.equals("") && Main.classInfo.equals("")) {
+			if (useSSL && Main.authJarFilePath.equals("") && Main.authClassInfo.equals("")) {
 				String keydir = new File(Main.volume.getPath()).getParent() + File.separator + "keys";
 				String key = keydir + File.separator + "tls_key.pem";
 				if (!new File(key).exists() || !IOServer.keyFileExists()) {
@@ -26,12 +30,34 @@ public static void start(boolean useSSL) throws IOException, InterruptedExceptio
 				}
 			}
 			FindOpenPort port = new FindOpenPort();
+
 			port.lock();
-			
-			Main.sdfsCliPort = FindOpenPort.pickFreePort(Main.sdfsCliPort);
-			grpcServer = new IOServer();
-			grpcServer.start(useSSL, Main.sdfsCliRequireMutualTLSAuth, Main.sdfsCliListenAddr, Main.sdfsCliPort);
+			try {
+
+				int[] portRangeInfo = readPortRange();
+				if (portRangeInfo != null && portRangeInfo.length == 2) {
+					SDFSLogger.getLog().info("Port RangeSpecified");
+					SDFSLogger.getLog()
+							.info("Starting Port: " + portRangeInfo[0] + " Range Specified: " + portRangeInfo[1]);
+					Main.sdfsCliPort = FindOpenPort.pickFreePort(portRangeInfo[0], portRangeInfo[1]);
+				} else {
+					SDFSLogger.getLog().info("Port Range not Specified");
+					Main.sdfsCliPort = FindOpenPort.pickFreePort(Main.sdfsCliPort, 0);
+				}
 
+				if (portRangeInfo != null && Main.sdfsCliPort == 0) {
+					SDFSLogger.getLog().info("No port Available in range Specified. Program Exiting with Code -2");
+					throw new Exception("No port Available in range Specified");
+				}
+
+				grpcServer = new IOServer();
+				grpcServer.start(useSSL, Main.sdfsCliRequireMutualTLSAuth, Main.sdfsCliListenAddr, Main.sdfsCliPort);
+			} catch (InterruptedException | IOException e) {
+				SDFSLogger.getLog().error("unable to lock port",e);
+				throw new Exception(e);
+			} finally {
+				port.unlock();
+			}
 			if (Main.volume.rabbitMQNode != null) {
 				try {
 					new MetaDataPush(Main.volume.rabbitMQNode, Main.volume.rabbitMQPort, Main.volume.rabbitMQUser,
@@ -61,4 +87,77 @@ public static void stop() {
 		}
 	}
 
+	public static int[] readPortRange() throws IOException {
+		if (Main.prodConfigFilePath.equals("") || Main.prodConfigVariable.equals("")) {
+			SDFSLogger.getLog().info("Port Range Not Specified");
+			return null;
+		}
+
+		String strfilePath = Main.prodConfigFilePath;
+		if ((new File(strfilePath).exists())) {
+			String strfieldName = Main.prodConfigVariable;
+			BufferedReader bufRdr = new BufferedReader(
+					new InputStreamReader(new FileInputStream(strfilePath), "ISO-8859-1"));
+			try {
+				// Read File Line By Line
+				for (String line; (line = bufRdr.readLine()) != null;) {
+					line = line.replaceAll("[^a-zA-Z0-9#=-]", "");
+					if (!line.startsWith("#") && line.contains(strfieldName)) {
+						String[] arrOfStr = line.split("=", 2);
+						String strPort = arrOfStr[1].toString().strip();
+						if (strPort != null && !strPort.isBlank() && !strPort.isEmpty()) {
+							arrOfStr = strPort.split("-", 2);
+							int minPort = Integer.parseInt(arrOfStr[0].toString());
+							int maxPort = Integer.parseInt(arrOfStr[1].toString());
+							if (minPort > maxPort)
+								return null;
+							else {
+								int portRange = (maxPort - minPort) + 1;
+								Main.sdfsCliPort = minPort;
+								return new int[] { minPort, portRange };
+							}
+						}
+					}
+				}
+				// Close the input stream
+				bufRdr.close();
+			} catch (Exception e) {
+				e.printStackTrace();
+				return null;
+			} finally {
+				bufRdr.close();
+			}
+			return null;
+		}
+		return null;
+	}
+
+	public static String executeLinuxCmd(String cmd) {
+		ProcessBuilder processBuilder = new ProcessBuilder();
+		// -- Linux --
+		// Run a shell command
+		processBuilder.command("bash", "-c", cmd);
+
+		StringBuilder output = new StringBuilder();
+		try {
+
+			Process process = processBuilder.start();
+
+			BufferedReader reader = new BufferedReader(
+					new InputStreamReader(process.getInputStream()));
+			String line;
+			while ((line = reader.readLine()) != null) {
+				output.append(line + " ");
+			}
+			process.waitFor();
+
+		} catch (IOException e) {
+			e.printStackTrace();
+		} catch (InterruptedException e) {
+			e.printStackTrace();
+		}
+
+		return output.toString();
+	}
+
 }
diff --git a/src/org/opendedup/sdfs/mgmt/grpc/AuthUtils.java b/src/org/opendedup/sdfs/mgmt/grpc/AuthUtils.java
index 4e857128c..2d1a21cb2 100644
--- a/src/org/opendedup/sdfs/mgmt/grpc/AuthUtils.java
+++ b/src/org/opendedup/sdfs/mgmt/grpc/AuthUtils.java
@@ -6,7 +6,7 @@ public class AuthUtils {
 
     public static enum ACTIONS {
         METADATA_READ, METADATA_WRITE, FILE_READ, FILE_WRITE, FILE_DELETE, VOLUME_READ, CONFIG_READ, CONFIG_WRITE,
-        EVENT_READ, AUTH_READ, AUTH_WRITE,
+        EVENT_READ, AUTH_READ, AUTH_WRITE,ENCRYPTION_READ,ENCRYPTION_WRITE
     }
 
     public static boolean validateUser(ACTIONS action) {
diff --git a/src/org/opendedup/sdfs/mgmt/grpc/EncryptionService.java b/src/org/opendedup/sdfs/mgmt/grpc/EncryptionService.java
new file mode 100644
index 000000000..cdbb0e894
--- /dev/null
+++ b/src/org/opendedup/sdfs/mgmt/grpc/EncryptionService.java
@@ -0,0 +1,308 @@
+package org.opendedup.sdfs.mgmt.grpc;
+
+import java.io.ByteArrayOutputStream;
+import java.io.FileFilter;
+import java.io.IOException;
+import java.io.File;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.security.PrivateKey;
+import java.security.cert.CertificateEncodingException;
+import java.security.cert.CertificateException;
+import java.security.cert.CertificateFactory;
+import java.security.cert.X509Certificate;
+import java.util.HashSet;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+import java.nio.file.Files;
+
+
+import com.google.protobuf.ByteString;
+
+import org.opendedup.grpc.EncryptionServiceGrpc.EncryptionServiceImplBase;
+import org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertRequest;
+import org.opendedup.grpc.EncryptionServiceOuterClass.DeleteExportedCertResponse;
+import org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyRequest;
+import org.opendedup.grpc.EncryptionServiceOuterClass.EncryptionKeyVerifyResponse;
+import org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertRequest;
+import org.opendedup.grpc.EncryptionServiceOuterClass.ExportServerCertResponse;
+import org.opendedup.grpc.FileInfo.errorCodes;
+import org.opendedup.logging.SDFSLogger;
+import org.opendedup.sdfs.Main;
+
+import io.grpc.stub.StreamObserver;
+import jakarta.xml.bind.DatatypeConverter;
+
+public class EncryptionService extends EncryptionServiceImplBase implements Runnable {
+    CertificateFactory certFactory = null;
+    private HashSet keys = new HashSet();
+    private final String trustStoreDir;
+    private final ReentrantReadWriteLock hl = new ReentrantReadWriteLock();
+    private final PrivateKey pvtKey;
+    private final X509Certificate serverCertChain;
+    String keydir = new File(Main.volume.getPath()).getParent() + File.separator + "keys";
+    String certChainFilePath = keydir + File.separator + "tls_key.pem";
+    String privateKeyFilePath = keydir + File.separator + "tls_key.key";
+
+    public EncryptionService(String trustStoreDir, PrivateKey pvtKey, X509Certificate serverCertChain)
+            throws Exception {
+        super();
+        this.trustStoreDir = trustStoreDir;
+        this.pvtKey = pvtKey;
+        this.serverCertChain = serverCertChain;
+        this.loadTrustManager();
+        Thread th = new Thread(this);
+        th.start();
+    }
+
+    @Override
+    public void validateCertificate(EncryptionKeyVerifyRequest request,
+            StreamObserver responseObserver) {
+        EncryptionKeyVerifyResponse.Builder b = EncryptionKeyVerifyResponse.newBuilder();
+        if (!AuthUtils.validateUser(AuthUtils.ACTIONS.EVENT_READ)) {
+            b.setError("User is not a member of any group with access");
+            b.setErrorCode(errorCodes.EACCES);
+            responseObserver.onNext(b.build());
+            responseObserver.onCompleted();
+            return;
+        }
+        try {
+            this.hl.readLock().lock();
+            boolean found;
+
+            found = this.keys.contains(request.getHash());
+            if (!found) {
+                this.hl.readLock().unlock();
+                try {
+                    this.hl.writeLock().lock();
+                    found = this.keys.contains(request.getHash());
+                    if (!found) {
+                        this.loadTrustManager();
+                        found = this.keys.contains(request.getHash());
+                    }
+                } finally {
+                    this.hl.writeLock().unlock();
+                    this.hl.readLock().lock();
+                }
+            }
+            b.setAccept(found);
+        } catch (NullPointerException e) {
+            b.setError(e.getMessage());
+            b.setErrorCode(errorCodes.ENOENT);
+        } catch (Exception e) {
+            SDFSLogger.getLog().error("unable to serialize message", e);
+            b.setError("unable to serialize message");
+            b.setErrorCode(errorCodes.EIO);
+        } finally {
+            this.hl.readLock().unlock();
+        }
+        responseObserver.onNext(b.build());
+        responseObserver.onCompleted();
+        return;
+    }
+
+    @Override
+    public void exportServerCertificate(ExportServerCertRequest request,
+            StreamObserver responseObserver) {
+        ExportServerCertResponse.Builder b = ExportServerCertResponse.newBuilder();
+        if (!AuthUtils.validateUser(AuthUtils.ACTIONS.ENCRYPTION_READ)) {
+            b.setError("User is not a member of any group with access");
+            b.setErrorCode(errorCodes.EACCES);
+            responseObserver.onNext(b.build());
+            responseObserver.onCompleted();
+            return;
+        }
+        try {
+            this.hl.writeLock().lock();
+            new File(keydir).mkdirs();
+            ByteArrayOutputStream fout = new ByteArrayOutputStream();
+            try {
+                writeKey(fout, pvtKey);
+                b.setPrivateKey(ByteString.copyFrom(fout.toByteArray()));
+            } catch (Exception e) {
+                SDFSLogger.getLog().error(e);
+            }
+            fout = new ByteArrayOutputStream();
+            try {
+                writeCertificate(fout, serverCertChain);
+                b.setCertChain(ByteString.copyFrom(fout.toByteArray()));
+            } catch (Exception e) {
+                SDFSLogger.getLog().error(e);
+            }
+        } catch (Exception e) {
+            SDFSLogger.getLog().error("unable to serialize message", e);
+            b.setError("unable to serialize message");
+            b.setErrorCode(errorCodes.EIO);
+        } finally {
+            this.hl.writeLock().unlock();
+        }
+        responseObserver.onNext(b.build());
+        responseObserver.onCompleted();
+        return;
+    }
+
+    @Override
+    public void deleteExportedCert(DeleteExportedCertRequest request,
+            StreamObserver responseObserver) {
+        DeleteExportedCertResponse.Builder b = DeleteExportedCertResponse.newBuilder();
+        if (!AuthUtils.validateUser(AuthUtils.ACTIONS.ENCRYPTION_WRITE)) {
+            b.setError("User is not a member of any group with access");
+            b.setErrorCode(errorCodes.EACCES);
+            responseObserver.onNext(b.build());
+            responseObserver.onCompleted();
+            return;
+        }
+        try {
+            this.hl.writeLock().lock();
+            File fp = new File(privateKeyFilePath);
+            File sc = new File(certChainFilePath);
+            SDFSLogger.getLog().info(" sdc =" + sc.exists() + " fpc=" + fp.exists());
+
+        } catch (Exception e) {
+            SDFSLogger.getLog().error("unable to delete server keys", e);
+            b.setError("unable to delete keys");
+            b.setErrorCode(errorCodes.EIO);
+        } finally {
+            this.hl.writeLock().unlock();
+        }
+
+    }
+
+    static void writeCertificate(OutputStream out, X509Certificate crt) throws Exception {
+        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        baos.write("-----BEGIN CERTIFICATE-----\r\n".getBytes());
+        writeBufferBase64(baos, crt.getEncoded());
+        baos.write("-----END CERTIFICATE-----\r\n".getBytes());
+        out.write(baos.toByteArray());
+        out.flush();
+        out.close();
+    }
+
+    static void writeKey(OutputStream out, PrivateKey pk) throws Exception {
+        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        final String fmt = pk.getFormat();
+        if ("PKCS#8".equals(fmt)) {
+            baos.write("-----BEGIN PRIVATE KEY-----\r\n".getBytes());
+            writeBufferBase64(baos, pk.getEncoded());
+            baos.write("-----END PRIVATE KEY-----\r\n".getBytes());
+        } else if ("PKCS#1".equals(fmt)) {
+            baos.write("-----BEGIN RSA PRIVATE KEY-----\r\n".getBytes());
+            writeBufferBase64(baos, pk.getEncoded());
+            baos.write("-----END RSA PRIVATE KEY-----\r\n".getBytes());
+        }
+        out.write(baos.toByteArray());
+        out.flush();
+        out.close();
+    }
+
+    static void writeBufferBase64(OutputStream out, byte[] bufIn) throws IOException {
+        final byte[] buf = DatatypeConverter.printBase64Binary(bufIn).getBytes();
+        final int BLOCK_SIZE = 64;
+        for (int i = 0; i < buf.length; i += BLOCK_SIZE) {
+            out.write(buf, i, Math.min(BLOCK_SIZE, buf.length - i));
+            out.write('\r');
+            out.write('\n');
+        }
+    }
+
+    @Override
+    public void run() {
+        int k = 0;
+        for (;;) {
+            try {
+                Thread.sleep(15 * 1000);
+                if (k == 60) {
+                    loadTrustManager();
+                    k = 0;
+                }
+                k++;
+                long tm = System.currentTimeMillis() - (15 * 1000);
+                try {
+                    this.hl.writeLock().lock();
+                    File fp = new File(privateKeyFilePath);
+                    File sc = new File(certChainFilePath);
+                    if (sc.exists() && sc.lastModified() < tm) {
+                        sc.delete();
+                    }
+                    if (fp.exists() && fp.lastModified() < tm) {
+                        fp.delete();
+                    }
+
+                } catch (Exception e) {
+                    SDFSLogger.getLog().error("unable to delete server keys", e);
+                } finally {
+                    this.hl.writeLock().unlock();
+                }
+            } catch (InterruptedException e) {
+
+            } catch (Exception e) {
+                SDFSLogger.getLog().error("error in EncryptionService Thread", e);
+            }
+        }
+
+    }
+
+    private String getThumbprint(X509Certificate cert)
+            throws NoSuchAlgorithmException, CertificateEncodingException {
+        MessageDigest md = MessageDigest.getInstance("SHA-256");
+        byte[] der = cert.getEncoded();
+        md.update(der);
+        byte[] digest = md.digest();
+        String digestHex = DatatypeConverter.printHexBinary(digest);
+        return digestHex.toLowerCase();
+    }
+
+    private void loadTrustManager() throws Exception {
+        try {
+
+            hl.writeLock().lock();
+            keys.clear();
+            File trustedCertificatesDir = new File(this.trustStoreDir);
+            SDFSLogger.getLog().debug("Load Trust Manager from " + trustedCertificatesDir.getPath());
+
+            // Implementing FileFilter to retrieve only the files in the directory
+            FileFilter fileFilter = new FileFilter() {
+                @Override
+                public boolean accept(File file) {
+                    if (file.isDirectory()) {
+                        SDFSLogger.getLog().debug("Directory, skipping it to add in TrustStore.");
+                        return false;
+                    } else {
+                        return true;
+                    }
+                }
+            };
+
+            File[] trustedCertFiles = trustedCertificatesDir.listFiles(fileFilter);
+
+            if (trustedCertFiles == null) {
+                throw new RuntimeException(
+                        "Could not find or list files in trusted directory: " + trustedCertificatesDir);
+            } else if (trustedCertFiles.length == 0) {
+                throw new RuntimeException(
+                        "Client auth is required but no trust anchors found in: " + trustedCertificatesDir);
+            }
+
+            for (File trustedCertFile : trustedCertFiles) {
+                CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
+                try (InputStream input = Files.newInputStream(trustedCertFile.toPath())) {
+                    while (input.available() > 0) {
+                        try {
+                            X509Certificate cert = (X509Certificate) certificateFactory.generateCertificate(input);
+                            keys.add(this.getThumbprint(cert));
+                        } catch (CertificateException e) {
+                            SDFSLogger.getLog().debug("Not a certificate file, skipping it to add in TrustStore.");
+                            continue;
+                        } catch (Exception e) {
+                            throw new CertificateException("Error loading certificate file: " + trustedCertFile, e);
+                        }
+                    }
+                }
+            }
+        } finally {
+            hl.writeLock().unlock();
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/src/org/opendedup/sdfs/mgmt/grpc/FileIOServiceImpl.java b/src/org/opendedup/sdfs/mgmt/grpc/FileIOServiceImpl.java
index 99a7c75fb..3212b9f08 100644
--- a/src/org/opendedup/sdfs/mgmt/grpc/FileIOServiceImpl.java
+++ b/src/org/opendedup/sdfs/mgmt/grpc/FileIOServiceImpl.java
@@ -11,7 +11,10 @@
 import org.opendedup.sdfs.mgmt.CloseFile;
 import org.opendedup.sdfs.mgmt.GetCloudFile;
 import org.opendedup.sdfs.mgmt.GetCloudMetaFile;
+import org.opendedup.sdfs.mgmt.MgmtWebServer;
 import org.opendedup.sdfs.notification.SDFSEvent;
+import org.opendedup.sdfs.servers.HCServiceProxy;
+import org.opendedup.util.CompressionUtils;
 import org.opendedup.util.OSValidator;
 
 import fuse.FuseFtypeConstants;
@@ -123,6 +126,10 @@
 import org.opendedup.grpc.IOService.UnlinkResponse;
 import org.opendedup.grpc.IOService.UtimeRequest;
 import org.opendedup.grpc.IOService.UtimeResponse;
+import org.opendedup.grpc.IOService.SetRetrievalTierRequest;
+import org.opendedup.grpc.IOService.SetRetrievalTierResponse;
+import org.opendedup.grpc.IOService.GetRetrievalTierRequest;
+import org.opendedup.grpc.IOService.GetRetrievalTierResponse;
 
 public class FileIOServiceImpl extends FileIOServiceGrpc.FileIOServiceImplBase {
     AtomicLong nextHandleNo = new AtomicLong(1000);
@@ -199,8 +206,7 @@ protected static File resolvePath(String path) throws FileIOError {
             throw e;
         }
         if (!_f.exists()) {
-            if (SDFSLogger.isDebug())
-                SDFSLogger.getLog().debug("No such node");
+            SDFSLogger.getLog().debug("No such node");
 
             _f = null;
             throw new FileIOError("path does not exist [" + path + "]", errorCodes.ENOENT);
@@ -588,6 +594,62 @@ public void setUserMetaData(SetUserMetaDataRequest req, StreamObserver streamWrite(StreamObserver responseObserver) {
+        return new StreamObserver() {
+
+            AtomicLong written = new AtomicLong();
+
+            @Override
+            public void onNext(DataWriteRequest request) {
+                if (!AuthUtils.validateUser(AuthUtils.ACTIONS.FILE_WRITE)) {
+                    SDFSLogger.getLog().error("User is not a member of any group with access");
+                    this.onError(new Exception("User is not a member of any group with access"));
+                } else {
+                    if (Main.volume.isOffLine()) {
+                        SDFSLogger.getLog().error("Volume is Offline");
+                        this.onError(new Exception("Volume is Offline"));
+                    }
+                    if (Main.volume.isFull()) {
+                        SDFSLogger.getLog().error("Volume Full");
+                        this.onError(new Exception("Volume Full"));
+                    }
+                    try {
+                        DedupFileChannel ch = getFileChannel(request.getFileHandle());
+                        ByteBuffer buf = request.getData().asReadOnlyByteBuffer();
+                        if (request.getCompressed()) {
+                            byte[] b = new byte[buf.capacity()];
+                            buf.get(b);
+                            byte[] chunk = CompressionUtils.decompressLz4(b, request.getLen());
+                            buf = ByteBuffer.wrap(chunk);
+                        }
+                        buf.position(0);
+                        ch.writeFile(buf, buf.capacity(), 0, request.getStart(), true);
+                        written.addAndGet(buf.capacity());
+                    } catch (Exception e) {
+                        SDFSLogger.getLog().error("Error while stream writing", e);
+                        this.onError(e);
+                    }
+                }
+            }
+
+            @Override
+            public void onError(Throwable t) {
+                SDFSLogger.getLog().error("error while writing", t);
+
+            }
+
+            @Override
+            public void onCompleted() {
+                responseObserver.onNext(DataWriteResponse.newBuilder().setWritten(written.get())
+                        .build());
+                responseObserver.onCompleted();
+
+            }
+
+        };
+    }
+
     @Override
     public void unlink(UnlinkRequest request, StreamObserver responseObserver) {
         UnlinkResponse.Builder b = UnlinkResponse.newBuilder();
@@ -599,8 +661,7 @@ public void unlink(UnlinkRequest request, StreamObserver respons
         } else {
             try {
                 String path = request.getPath();
-                if (SDFSLogger.isDebug())
-                    SDFSLogger.getLog().debug("removing " + path);
+                SDFSLogger.getLog().debug("removing " + path);
                 if (!Main.safeClose) {
                     try {
                         this.getFileChannel(path, -1, true).getDedupFile().forceClose();
@@ -619,6 +680,8 @@ public void unlink(UnlinkRequest request, StreamObserver respons
                     // SDFSLogger.getLog().info("deleting symlink " + f.getPath());
                     try {
                         MetaDataDedupFile mf = MetaFileStore.getMF(FileIOServiceImpl.resolvePath(path));
+                        SDFSLogger.getLog().debug("Unlink::chattr set non-Immutable file: " + path);
+                        ImmuteLinuxFDFileFile(path, false);
                         eventBus.post(new MFileDeleted(mf));
                         Files.delete(p);
                         responseObserver.onNext(b.build());
@@ -634,30 +697,50 @@ public void unlink(UnlinkRequest request, StreamObserver respons
                     }
                 } else {
                     File f = FileIOServiceImpl.resolvePath(path);
-                    try {
-                        MetaFileStore.getMF(f).clearRetentionLock();
-                        if (MetaFileStore.removeMetaFile(f.getPath(), false, false, true)) {
-                            // SDFSLogger.getLog().info("deleted file " +
-                            // f.getPath());
-                            responseObserver.onNext(b.build());
-                            responseObserver.onCompleted();
-                            return;
-                        } else {
-                            SDFSLogger.getLog().warn("unable to delete file " + f.getPath());
-                            b.setError("unable to delete symlink " + f.getPath());
+                    Path f_p = Paths.get(f.getPath());
+                    BasicFileAttributes attr = Files.readAttributes(f_p, BasicFileAttributes.class);
+                    long creationTime = attr.creationTime().toMillis();
+                    long currentTime = System.currentTimeMillis();
+                    int main_period = Main.immutabilityPeriod;
+                    int diff_period = (int) (currentTime - creationTime) / 86400000;// 1000milli * 60s * 60min * 24h ==>
+                                                                                    // days
+
+                    if (diff_period >= main_period || diff_period < 1) {
+                        try {
+                            SDFSLogger.getLog().info("Unlink::chattr set non-Immutable file: " + f.getPath());
+                            ImmuteLinuxFDFileFile(f.getPath(), false);
+                            MetaFileStore.getMF(f).clearRetentionLock();
+                            if (MetaFileStore.removeMetaFile(f.getPath(), false, false, true)) {
+                                // SDFSLogger.getLog().info("deleted file " +
+                                // f.getPath());
+                                responseObserver.onNext(b.build());
+                                responseObserver.onCompleted();
+                                return;
+                            } else {
+                                SDFSLogger.getLog().warn("unable to delete file " + f.getPath());
+                                b.setError("unable to delete symlink " + f.getPath());
+                                b.setErrorCode(errorCodes.EACCES);
+                                responseObserver.onNext(b.build());
+                                responseObserver.onCompleted();
+                                return;
+                            }
+                        } catch (Exception e) {
+                            SDFSLogger.getLog().error("unable to delete file " + path, e);
+                            b.setError("unable to delete " + f.getPath());
                             b.setErrorCode(errorCodes.EACCES);
                             responseObserver.onNext(b.build());
                             responseObserver.onCompleted();
                             return;
                         }
-                    } catch (Exception e) {
-                        SDFSLogger.getLog().error("unable to delete file " + path, e);
-                        b.setError("unable to delete " + f.getPath());
-                        b.setErrorCode(errorCodes.EACCES);
+                    } else {
+                        SDFSLogger.getLog().error("Immutability period not completed.");
+                        b.setError("Immutability period is set to " + main_period + " days.");
+                        b.setErrorCode(errorCodes.ETIME);
                         responseObserver.onNext(b.build());
                         responseObserver.onCompleted();
                         return;
                     }
+
                 }
             } catch (FileIOError e) {
                 b.setError(e.message);
@@ -701,12 +784,17 @@ public void write(DataWriteRequest request, StreamObserver re
                     return;
                 }
                 DedupFileChannel ch = this.getFileChannel(request.getFileHandle());
-                ByteBuffer buf = ByteBuffer.allocate(request.getLen());
-                request.getData().copyTo(buf);
+                ByteBuffer buf = request.getData().asReadOnlyByteBuffer();
+                if (request.getCompressed()) {
+                    byte[] bf = new byte[buf.capacity()];
+                    buf.get(bf);
+                    byte[] chunk = CompressionUtils.decompressLz4(bf, request.getLen());
+                    buf = ByteBuffer.wrap(chunk);
+                }
                 buf.position(0);
                 try {
                     SDFSLogger.getLog().debug("Writing " + ch.openFile().getPath() + " pos=" + request.getStart()
-                            + " len=" + buf.capacity());
+                            + " len=" + buf.capacity() + " compressed=" + request.getCompressed());
                     /*
                      * byte[] k = new byte[buf.capacity()]; buf.get(k); buf.position(0);
                      * Files.write(Paths.get("c:/temp/" + ch.openFile().getName()), new
@@ -761,8 +849,10 @@ public void release(FileCloseRequest request, StreamObserver
                 if (!Main.safeClose)
                     return;
                 if (ch != null) {
+                    ImmuteLinuxFDFileFile(ch.getPath(), false);
                     ch.getDedupFile().unRegisterChannel(ch, -2);
                     CloseFile.close(ch.getFile(), ch.isWrittenTo());
+                    ImmuteLinuxFDFileFile(ch.getPath(), true);
                     ch = null;
                     responseObserver.onNext(b.build());
                     responseObserver.onCompleted();
@@ -782,6 +872,25 @@ public void release(FileCloseRequest request, StreamObserver
         }
     }
 
+    public void ImmuteLinuxFDFileFile(String filePath, Boolean isImmutable) {
+        if (OSValidator.isUnix()) {
+            String strCommand = "";
+            if (filePath != null && !filePath.isEmpty()) {
+
+                if (isImmutable) {
+                    SDFSLogger.getLog().debug("chattr set Immutable, file: " + filePath);
+                    SDFSLogger.getLog().debug("Command::sudo chattr +i -V " + filePath);
+                    strCommand = "sudo chattr +i -V " + filePath;
+                } else {
+                    SDFSLogger.getLog().debug("chattr set non-Immutable, file: " + filePath);
+                    SDFSLogger.getLog().debug("COmmand::sudo chattr -i -V " + filePath);
+                    strCommand = "sudo chattr -i -V " + filePath;
+                }
+                MgmtWebServer.executeLinuxCmd(strCommand);
+            }
+        }
+    }
+
     @Override
     public void mknod(MkNodRequest request, StreamObserver responseObserver) {
         MkNodResponse.Builder b = MkNodResponse.newBuilder();
@@ -822,7 +931,11 @@ public void mknod(MkNodRequest request, StreamObserver responseOb
                     MetaDataDedupFile mf = MetaFileStore.getMF(f);
                     mf.unmarshal();
                     try {
-                        mf.setMode(request.getMode());
+                        if (request.getMode() == 0) {
+                            mf.setMode(511);
+                        } else {
+                            mf.setMode(request.getMode());
+                        }
                     } finally {
                         f = null;
                     }
@@ -903,16 +1016,27 @@ public void read(DataReadRequest request, StreamObserver respo
                 return;
             }
             try {
-                ByteBuffer buf = ByteBuffer.allocate(request.getLen());
+                ByteBuffer buf = ByteBuffer.wrap(new byte[request.getLen()]);
                 DedupFileChannel ch = this.getFileChannel((Long) request.getFileHandle());
                 int read = ch.read(buf, 0, buf.capacity(), request.getStart());
                 if (read == -1)
                     read = 0;
-                buf.position(0);
+
                 b.setRead(read);
+                if (request.getCompress() && read > 1) {
+                    byte[] chunk = CompressionUtils.compressLz4(buf.array());
+                    if (read < chunk.length) {
+                        buf = ByteBuffer.wrap(chunk);
+                    }
+                }
+                while (Main.rehydrateBlobs) {
+                    Thread.sleep(10000);
+                }
+                buf.position(0);
                 b.setData(ByteString.copyFrom(buf, read));
                 responseObserver.onNext(b.build());
                 responseObserver.onCompleted();
+                HCServiceProxy.set_move_blob(false);
                 return;
             } catch (FileIOError e) {
                 b.setError(e.message);
@@ -921,7 +1045,7 @@ public void read(DataReadRequest request, StreamObserver respo
                 responseObserver.onCompleted();
                 return;
             } catch (DataArchivedException e) {
-                SDFSLogger.getLog().info("Readin 4");
+                SDFSLogger.getLog().debug("Readin 4");
                 SDFSLogger.getLog().warn("Data is archived");
                 b.setError("Data is archived");
                 b.setErrorCode(errorCodes.ENODATA);
@@ -950,7 +1074,7 @@ public void stat(FileInfoRequest req, StreamObserver respon
             File f = new File(internalPath);
             SDFSLogger.getLog().debug("looking for " + f.getPath());
             if (!f.exists()) {
-                SDFSLogger.getLog().info("File not found " + req.getFileName());
+                SDFSLogger.getLog().debug("File not found " + req.getFileName());
                 b.setError("File not found " + req.getFileName());
                 b.setErrorCode(errorCodes.ENOENT);
                 responseObserver.onNext(b.build());
@@ -989,7 +1113,7 @@ public void chmod(ChmodRequest req, StreamObserver responseObserv
             String path = req.getPath();
             int mode = req.getMode();
             if (!f.exists()) {
-                SDFSLogger.getLog().info("File not found " + req.getPath());
+                SDFSLogger.getLog().debug("File not found " + req.getPath());
                 b.setError("File not found " + req.getPath());
                 b.setErrorCode(errorCodes.ENOENT);
                 responseObserver.onNext(b.build());
@@ -1075,7 +1199,7 @@ public void chown(ChownRequest req, StreamObserver responseObserv
                 if (ftype == FuseFtypeConstants.TYPE_SYMLINK || ftype == FuseFtypeConstants.TYPE_DIR) {
                     Path p = Paths.get(f.getCanonicalPath());
                     try {
-                        SDFSLogger.getLog().info("setting uid " + uid + "and gid " + gid);
+                        SDFSLogger.getLog().debug("setting uid " + uid + "and gid " + gid);
                         if (!OSValidator.isWindows()) {
                             Files.setAttribute(p, "unix:uid", Integer.valueOf(uid), LinkOption.NOFOLLOW_LINKS);
                             Files.setAttribute(p, "unix:gid", Integer.valueOf(gid), LinkOption.NOFOLLOW_LINKS);
@@ -1886,7 +2010,13 @@ public void rename(FileRenameRequest req, StreamObserver res
                     responseObserver.onCompleted();
                     return;
                 }
-                MetaFileStore.rename(f.getCanonicalPath(), nf.getCanonicalPath());
+                ImmuteLinuxFDFileFile(f.getPath(), false);
+                boolean rn = MetaFileStore.rename(f.getCanonicalPath(), nf.getCanonicalPath());
+                if (!rn) {
+                    SDFSLogger.getLog().error("unable to rename " + req.getSrc() + " to " + req.getDest());
+                    b.setError("unable to rename " + req.getSrc() + " to " + req.getDest());
+                    b.setErrorCode(errorCodes.EACCES);
+                }
                 responseObserver.onNext(b.build());
                 responseObserver.onCompleted();
                 return;
@@ -2159,6 +2289,79 @@ public void fileExists(FileExistsRequest req, StreamObserver
         }
     }
 
+    public void setRetrievalTier(SetRetrievalTierRequest req,
+            StreamObserver responseObserver) {
+        SetRetrievalTierResponse.Builder b = SetRetrievalTierResponse.newBuilder();
+        if (!AuthUtils.validateUser(AuthUtils.ACTIONS.FILE_READ)) {
+            b.setError("User is not a member of any group with access");
+            b.setErrorCode(errorCodes.EACCES);
+            responseObserver.onNext(b.build());
+            responseObserver.onCompleted();
+        } else {
+            synchronized (this) {
+                try {
+                    String tierType = req.getTierType();
+                    if (!tierType.isEmpty()) {
+                        SDFSLogger.getLog().info("Tier type: " + tierType);
+                        if (tierType.equalsIgnoreCase("expedited") || tierType.equalsIgnoreCase("standard")
+                                || tierType.equalsIgnoreCase("bulk") || tierType.equalsIgnoreCase("high")) {
+                            Main.retrievalTier = tierType;
+                            SDFSLogger.getLog().info("Retrieval tier is set to: " + Main.retrievalTier);
+                        } else {
+                            b.setError("SetRetrievalTier error, not a proper retrieval tier: " + req.getTierType());
+                            b.setErrorCode(errorCodes.EIO);
+                        }
+                    } else {
+                        b.setError("SetRetrievalTier error, retrieval tier is empty " + req.getTierType());
+                        b.setErrorCode(errorCodes.EIO);
+                    }
+                    responseObserver.onNext(b.build());
+                    responseObserver.onCompleted();
+                    return;
+                } catch (Exception e) {
+                    b.setError("SetRetrievalTier error " + req.getTierType());
+                    b.setErrorCode(errorCodes.EIO);
+                    responseObserver.onNext(b.build());
+                    responseObserver.onCompleted();
+                    return;
+                }
+            }
+        }
+    }
+
+    public void getRetrievalTier(GetRetrievalTierRequest req,
+            StreamObserver responseObserver) {
+        GetRetrievalTierResponse.Builder b = GetRetrievalTierResponse.newBuilder();
+        if (!AuthUtils.validateUser(AuthUtils.ACTIONS.FILE_READ)) {
+            b.setError("User is not a member of any group with access");
+            b.setErrorCode(errorCodes.EACCES);
+            responseObserver.onNext(b.build());
+            responseObserver.onCompleted();
+        } else {
+            synchronized (this) {
+                try {
+                    String tierType = Main.retrievalTier;
+                    if (tierType.equals("")) {
+                        b.setError("GetRetrievalTier error, retrieval tier is not set explicitly");
+                        b.setErrorCode(errorCodes.EIO);
+                    } else {
+                        b.setTierType("Tier type: " + tierType);
+                    }
+                    responseObserver.onNext(b.build());
+                    responseObserver.onCompleted();
+                    return;
+                } catch (Exception e) {
+                    b.setTierType("");
+                    b.setError("GetRetrievalTier error");
+                    b.setErrorCode(errorCodes.EIO);
+                    responseObserver.onNext(b.build());
+                    responseObserver.onCompleted();
+                    return;
+                }
+            }
+        }
+    }
+
     protected static class FileIOError extends Exception {
         /**
          *
@@ -2270,7 +2473,7 @@ public void syncEvent(org.opendedup.sdfs.io.events.MFileDownloaded _evt) {
                 try {
                     responseObserver.onNext(b.build());
 
-                    SDFSLogger.getLog().info("Sent message");
+                    SDFSLogger.getLog().debug("Sent message");
                 } catch (Exception e) {
                     SDFSLogger.getLog().error("Unable to send message", e);
                     this.close();
@@ -2295,7 +2498,7 @@ public void syncEvent(org.opendedup.sdfs.io.events.MFileWritten _evt) {
                 try {
                     responseObserver.onNext(b.build());
 
-                    SDFSLogger.getLog().info("Sent message");
+                    SDFSLogger.getLog().debug("Sent message");
                 } catch (Exception e) {
                     SDFSLogger.getLog().error("Unable to send message", e);
                     this.close();
@@ -2319,7 +2522,7 @@ public void syncEvent(org.opendedup.sdfs.io.events.MFileDeleted _evt) {
                 try {
                     responseObserver.onNext(b.build());
 
-                    SDFSLogger.getLog().info("Sent message");
+                    SDFSLogger.getLog().debug("Sent message");
                 } catch (Exception e) {
                     SDFSLogger.getLog().error("Unable to send message", e);
                     this.close();
@@ -2343,7 +2546,7 @@ public void syncEvent(org.opendedup.sdfs.io.events.MFileUploaded _evt) {
                 try {
                     responseObserver.onNext(b.build());
 
-                    SDFSLogger.getLog().info("Sent message");
+                    SDFSLogger.getLog().debug("Sent message");
                 } catch (Exception e) {
                     SDFSLogger.getLog().error("Unable to send message", e);
                     this.close();
diff --git a/src/org/opendedup/sdfs/mgmt/grpc/IOServer.java b/src/org/opendedup/sdfs/mgmt/grpc/IOServer.java
index 1fdcdf285..3836c411d 100644
--- a/src/org/opendedup/sdfs/mgmt/grpc/IOServer.java
+++ b/src/org/opendedup/sdfs/mgmt/grpc/IOServer.java
@@ -1,6 +1,6 @@
 package org.opendedup.sdfs.mgmt.grpc;
 
-import org.apache.log4j.Logger;
+
 import org.opendedup.logging.SDFSLogger;
 import org.opendedup.sdfs.Main;
 import org.opendedup.sdfs.mgmt.grpc.tls.DynamicTrustManager;
@@ -20,20 +20,21 @@
 import io.grpc.ServerCallHandler;
 import io.grpc.Metadata.Key;
 
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
 import java.security.PrivateKey;
 import java.security.cert.CertificateException;
 import java.security.cert.CertificateFactory;
 import java.security.cert.X509Certificate;
 import java.util.Arrays;
 import java.util.List;
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
 import java.util.Map;
-import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
 
 import javax.net.ssl.SSLSession;
@@ -42,21 +43,24 @@
 import io.grpc.netty.shaded.io.grpc.netty.NettyServerBuilder;
 import io.grpc.netty.shaded.io.netty.handler.ssl.ClientAuth;
 import io.grpc.netty.shaded.io.netty.handler.ssl.SslContextBuilder;
+import jakarta.xml.bind.DatatypeConverter;
 
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Method;
 import java.net.URL;
 import java.net.URLClassLoader;
 
+
+
 public class IOServer {
   private Server server;
-  private Logger logger = SDFSLogger.getLog();
   private static final String DELIMITER = ";;";
   public static String trustStoreDir;
 
   private X509Certificate getX509Certificate(String certPath) throws Exception {
     FileInputStream is = null;
     try {
+      //SDFSLogger.getLog().info("Cert Path  = " + certPath);
       CertificateFactory certFactory = CertificateFactory.getInstance("X.509");
       is = new FileInputStream(certPath);
       X509Certificate cer = (X509Certificate) certFactory.generateCertificate(is);
@@ -83,17 +87,16 @@ private SslContextBuilder getSslContextBuilder(String certChainFilePath, String
   private SslContextBuilder getSslContextBuilder(String certChainFilePath, String privateKeyFilePath,
       String trustCertCollectionFilePath) throws Exception {
     SslContextBuilder sslClientContextBuilder = null;
-    if (!Main.jarFilePath.equals("") && !Main.classInfo.equals("")) {
+    if (!Main.authJarFilePath.equals("") && !Main.authClassInfo.equals("")) {
       /*
        * Main.classInfo contains class name and its two methods to load separated by
        * ;;
        */
-      List classInfo = Arrays.asList(Main.classInfo.split(DELIMITER));
+      List classInfo = Arrays.asList(Main.authClassInfo.split(DELIMITER));
       String loadclass = classInfo.get(0);
       String key_method = classInfo.get(1);
       String path_method = classInfo.get(2);
-
-      URL[] classLoaderUrls = new URL[] { new URL("file:" + Main.jarFilePath) };
+      URL[] classLoaderUrls = new URL[] { new URL("file:" + Main.authJarFilePath) };
       // Create a new URLClassLoader
       URLClassLoader urlClassLoader = new URLClassLoader(classLoaderUrls);
       // Load the target class
@@ -111,14 +114,13 @@ private SslContextBuilder getSslContextBuilder(String certChainFilePath, String
       Method method2 = beanClass.getMethod(key_method);
       PrivateKey pvtKey = (PrivateKey) method2.invoke(beanObj);
       urlClassLoader.close();
-
       X509Certificate serverCertChain = getX509Certificate(certChainFilePath);
       EasyX509TrustManager tm = new EasyX509TrustManager();
-
-      sslClientContextBuilder = SslContextBuilder.forServer(pvtKey, serverCertChain).clientAuth(ClientAuth.REQUIRE)
-          .trustManager(tm);
+      sslClientContextBuilder = SslContextBuilder.forServer(pvtKey, serverCertChain)
+          .clientAuth(ClientAuth.REQUIRE).trustManager(tm);
     } else {
-      sslClientContextBuilder = SslContextBuilder.forServer(new File(certChainFilePath), new File(privateKeyFilePath));
+      sslClientContextBuilder = SslContextBuilder.forServer(new File(certChainFilePath),
+          new File(privateKeyFilePath));
       DynamicTrustManager tm = new DynamicTrustManager(new File(trustCertCollectionFilePath).getParent());
       sslClientContextBuilder.trustManager(tm);
       sslClientContextBuilder.clientAuth(ClientAuth.REQUIRE);
@@ -129,6 +131,43 @@ private SslContextBuilder getSslContextBuilder(String certChainFilePath, String
     return GrpcSslContexts.configure(sslClientContextBuilder);
   }
 
+  static void writeBufferBase64(OutputStream out, byte[] bufIn) throws IOException {
+    final byte[] buf = DatatypeConverter.printBase64Binary(bufIn).getBytes();
+    final int BLOCK_SIZE = 64;
+    for (int i = 0; i < buf.length; i += BLOCK_SIZE) {
+      out.write(buf, i, Math.min(BLOCK_SIZE, buf.length - i));
+      out.write('\r');
+      out.write('\n');
+    }
+  }
+
+  static void writeCertificate(OutputStream out, X509Certificate crt) throws Exception {
+    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+    baos.write("-----BEGIN CERTIFICATE-----\r\n".getBytes());
+    writeBufferBase64(baos, crt.getEncoded());
+    baos.write("-----END CERTIFICATE-----\r\n".getBytes());
+    out.write(baos.toByteArray());
+    out.flush();
+    out.close();
+  }
+
+  static void writeKey(OutputStream out, PrivateKey pk) throws Exception {
+    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+    final String fmt = pk.getFormat();
+    if ("PKCS#8".equals(fmt)) {
+      baos.write("-----BEGIN PRIVATE KEY-----\r\n".getBytes());
+      writeBufferBase64(baos, pk.getEncoded());
+      baos.write("-----END PRIVATE KEY-----\r\n".getBytes());
+    } else if ("PKCS#1".equals(fmt)) {
+      baos.write("-----BEGIN RSA PRIVATE KEY-----\r\n".getBytes());
+      writeBufferBase64(baos, pk.getEncoded());
+      baos.write("-----END RSA PRIVATE KEY-----\r\n".getBytes());
+    }
+    out.write(baos.toByteArray());
+    out.flush();
+    out.close();
+  }
+
   public static boolean keyFileExists() {
     String keydir = new File(Main.volume.getPath()).getParent() + File.separator + "keys";
     String certChainFilePath = keydir + File.separator + "tls_key.pem";
@@ -150,6 +189,37 @@ public static boolean keyFileExists() {
     return true;
   }
 
+  private EncryptionService getEncService() throws Exception {
+    try {
+      List classInfo = Arrays.asList(Main.authClassInfo.split(DELIMITER));
+      String loadclass = classInfo.get(0);
+      String key_method = classInfo.get(1);
+      String path_method = classInfo.get(2);
+      URL[] classLoaderUrls = new URL[] { new URL("file:" + Main.authJarFilePath) };
+      // Create a new URLClassLoader
+      URLClassLoader urlClassLoader = new URLClassLoader(classLoaderUrls);
+      // Load the target class
+      Class beanClass = urlClassLoader.loadClass(loadclass);
+      // Create a new instance from the loaded class
+      Constructor constructor = beanClass.getConstructor();
+      Object beanObj = constructor.newInstance();
+      // Getting a method from the loaded class and invoke it
+      Method method = beanClass.getMethod(path_method);
+      String path = (String) method.invoke(beanObj);
+      List prodInfo = Arrays.asList(path.split(DELIMITER));
+      String certChainFilePath = prodInfo.get(0);
+      trustStoreDir = prodInfo.get(1);
+      // Getting a method from the loaded class and invoke it
+      Method method2 = beanClass.getMethod(key_method);
+      PrivateKey pvtKey = (PrivateKey) method2.invoke(beanObj);
+      urlClassLoader.close();
+      X509Certificate serverCertChain = getX509Certificate(certChainFilePath);
+      return new EncryptionService(trustStoreDir, pvtKey, serverCertChain);
+    } catch (Exception e) {
+      throw new Exception(e);
+    }
+  }
+
   public void start(boolean useSSL, boolean useClientTLS, String host, int port) throws IOException {
     String keydir = new File(Main.volume.getPath()).getParent() + File.separator + "keys";
     String certChainFilePath = keydir + File.separator + "tls_key.pem";
@@ -168,15 +238,29 @@ public void start(boolean useSSL, boolean useClientTLS, String host, int port) t
     }
 
     /* The port on which the server should run */
-    logger.info(
+    SDFSLogger.getLog().info(
         "Server started, listening on " + host + ":" + port + " tls = " + useSSL + " threads=" + Main.writeThreads);
     SocketAddress address = new InetSocketAddress(host, port);
+    int maxMessageSize = 40*1024*1024;
+    if((Main.CHUNK_LENGTH * 3) > maxMessageSize) {
+      maxMessageSize=Main.CHUNK_LENGTH * 3;
+    }
     NettyServerBuilder b = NettyServerBuilder.forAddress(address).addService(new VolumeImpl())
-        .addService(new StorageServiceImpl()).executor(Executors.newFixedThreadPool(Main.writeThreads))
-        .maxInboundMessageSize(Main.CHUNK_LENGTH*2).maxInboundMetadataSize(Main.CHUNK_LENGTH*2).addService(new FileIOServiceImpl())
-        .intercept(new AuthorizationInterceptor()).addService(new SDFSEventImpl())
+        .addService(new StorageServiceImpl()).directExecutor()
+        .maxInboundMessageSize(maxMessageSize).maxInboundMetadataSize(maxMessageSize)
+        .addService(new FileIOServiceImpl())
+        .addService(new SDFSEventImpl())
         .addService(new SdfsUserServiceImpl());
-    SDFSLogger.getLog().info("Set Max Message Size to " +(Main.CHUNK_LENGTH*2));
+    if (!Main.authJarFilePath.equals("") && !Main.authClassInfo.equals("")) {
+      try {
+        b.addService(this.getEncService());
+        SDFSLogger.getLog().info("Added EncryptionService");
+      } catch (Exception e) {
+        SDFSLogger.getLog().error(e);
+        throw new IOException(e);
+      }
+    }
+    SDFSLogger.getLog().info("Set Max Message Size to " + (Main.CHUNK_LENGTH * 2));
     if (useSSL) {
       if (useClientTLS) {
         try {
@@ -193,7 +277,7 @@ public void start(boolean useSSL, boolean useClientTLS, String host, int port) t
     }
 
     server = b.build().start();
-    logger.info("Server started, listening on " + host + ":" + port + " tls = " + useSSL + " mtls = " + useClientTLS);
+    SDFSLogger.getLog().info("Server started, listening on " + host + ":" + port + " tls = " + useSSL + " mtls = " + useClientTLS);
     Runtime.getRuntime().addShutdownHook(new Thread() {
       @Override
       public void run() {
@@ -278,4 +362,6 @@ public  Listener interceptCall(ServerCall call,
     }
   }
 
+
+  
 }
\ No newline at end of file
diff --git a/src/org/opendedup/sdfs/mgmt/grpc/StorageServiceImpl.java b/src/org/opendedup/sdfs/mgmt/grpc/StorageServiceImpl.java
index aa73cb739..701e0251d 100644
--- a/src/org/opendedup/sdfs/mgmt/grpc/StorageServiceImpl.java
+++ b/src/org/opendedup/sdfs/mgmt/grpc/StorageServiceImpl.java
@@ -6,11 +6,16 @@
 import java.io.InputStream;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map.Entry;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
 import com.google.protobuf.ByteString;
 
 import org.opendedup.collections.InsertRecord;
+import org.opendedup.util.CompressionUtils;
 import org.opendedup.collections.LongByteArrayMap;
 import org.opendedup.collections.SparseDataChunk;
 import org.opendedup.grpc.FileInfo.errorCodes;
@@ -18,9 +23,11 @@
 import org.opendedup.grpc.Storage.CheckHashesResponse;
 import org.opendedup.grpc.Storage.ChunkEntry;
 import org.opendedup.grpc.Storage.ChunkResponse;
+import org.opendedup.grpc.Storage.HashLocPairP;
 import org.opendedup.grpc.Storage.HashingInfoRequest;
 import org.opendedup.grpc.Storage.HashingInfoResponse;
 import org.opendedup.grpc.Storage.MetaDataDedupeFileRequest;
+import org.opendedup.grpc.Storage.SparseDataChunkP;
 import org.opendedup.grpc.Storage.SparseDedupeChunkWriteRequest;
 import org.opendedup.grpc.Storage.SparseDedupeChunkWriteResponse;
 import org.opendedup.grpc.Storage.SparseDedupeFileRequest;
@@ -32,10 +39,18 @@
 import org.opendedup.logging.SDFSLogger;
 import org.opendedup.sdfs.Main;
 import org.opendedup.sdfs.filestore.ChunkData;
+import org.opendedup.sdfs.filestore.DedupFileStore;
 import org.opendedup.sdfs.io.DedupFileChannel;
+import org.opendedup.sdfs.io.HashLocPair;
 import org.opendedup.sdfs.mgmt.grpc.FileIOServiceImpl.FileIOError;
 import org.opendedup.sdfs.servers.HCServiceProxy;
 
+import com.google.common.io.BaseEncoding;
+import com.google.common.primitives.Longs;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ListeningExecutorService;
+import com.google.common.util.concurrent.MoreExecutors;
+
 import io.grpc.stub.StreamObserver;
 
 public class StorageServiceImpl extends StorageServiceImplBase {
@@ -47,6 +62,9 @@ public class StorageServiceImpl extends StorageServiceImplBase {
     public static final String VARIABLE_HWY_256 = "VARIABLE_HWY_256";
     public static final String VARIABLE_MD5 = "VARIABLE_MD5";
 
+    ExecutorService threadpool = Executors.newFixedThreadPool(Main.writeThreads * 4);
+    ListeningExecutorService service = MoreExecutors.listeningDecorator(threadpool);
+
     public StorageServiceImpl() {
 
     }
@@ -163,12 +181,20 @@ public void checkHashes(CheckHashesRequest request, StreamObserver hashes = request.getHashesList();
-                List responses = new ArrayList(hashes.size());
+                List responses = new ArrayList();
+                List> futures = new ArrayList>();
+
                 for (ByteString bs : hashes) {
-                    responses.add(HCServiceProxy.getHashesMap().get(bs.toByteArray()));
+                    ListenableFuture lf = service.submit(() -> {
+                        return HCServiceProxy.getHashesMap().get(bs.toByteArray());
+                    });
+                    futures.add(lf);
+                }
+                for (ListenableFuture future : futures) {
+                    responses.add(future.get());
                 }
+
                 b.addAllLocations(responses);
                 responseObserver.onNext(b.build());
                 responseObserver.onCompleted();
@@ -189,6 +215,7 @@ public void writeChunks(WriteChunksRequest request, StreamObserver responses = new ArrayList(
-                        request.getChunksCount());
+                List> futures = new ArrayList>();
+                List responses = new ArrayList();
                 for (ChunkEntry ent : request.getChunksList()) {
-                    byte[] chunk = ent.getData().toByteArray();
-                    if (chunk.length > 0) {
-                        /*
-                         * byte [] hash = ent.getHash().toByteArray(); byte [] ek =
-                         * SparseDedupFile.eng.getHash(chunk); if(!Arrays.equals(hash, ek)) {
-                         * SDFSLogger.getLog().info("failed"); }
-                         */
-                        ChunkData cm = new ChunkData(ent.getHash().toByteArray(), chunk.length, chunk,
-                                ch.getDedupFile().getGUID());
-                        InsertRecord ir = HCServiceProxy.getHashesMap().put(cm, true);
-                        responses.add(ir.toProtoBuf());
-                    } else {
-                        responses.add(new InsertRecord(false, -1).toProtoBuf());
-                    }
+                    ListenableFuture lf = service.submit(() -> {
+                        byte[] chunk = ent.getData().toByteArray();
+                        if (chunk.length > 0) {
+                            if (ent.getCompressed()) {
+                                chunk = CompressionUtils.decompressLz4(chunk, ent.getCompressedLength());
+                            }
+
+                            ChunkData cm = new ChunkData(ent.getHash().toByteArray(), chunk.length, chunk,
+                                    ch.getDedupFile().getGUID());
+                            InsertRecord ir = HCServiceProxy.getHashesMap().put(cm, true);
+                            SDFSLogger.getLog().debug("write archive is " + Longs.fromByteArray(ir.getHashLocs()));
+                            ch.setWrittenTo(true);
+                            return ir.toProtoBuf();
+                        } else {
+                            return new InsertRecord(false, -1,0).toProtoBuf();
+                        }
+                    });
+                    futures.add(lf);
+                }
+                for (ListenableFuture lf : futures) {
+                    responses.add(lf.get());
                 }
                 b.addAllInsertRecords(responses);
                 responseObserver.onNext(b.build());
@@ -258,29 +291,94 @@ public void writeSparseDataChunk(SparseDedupeChunkWriteRequest request,
                     responseObserver.onCompleted();
                     return;
                 }
-                SparseDataChunk sp = new SparseDataChunk(request.getChunk());
-                ch.getDedupFile().updateMap(sp, request.getFileLocation());
-                long ep = sp.getFpos() + sp.len;
-                if (ep > ch.getFile().length()) {
-                    ch.getFile().setLength(ep, false);
-                    SDFSLogger.getLog().debug("Set length to " + ep + " " + sp.len + " ");
+                SparseDataChunk sp = null;
+                if (request.getCompressed()) {
+                    byte[] chunk = CompressionUtils.decompressLz4(request.getCompressedChunk().toByteArray(),
+                            request.getUncompressedLen());
+
+                    sp = new SparseDataChunk(SparseDataChunkP.parseFrom(chunk));
                 } else {
-                    SDFSLogger.getLog()
-                            .debug("no length to " + sp.getFpos() + " " + request.getChunk().getLen() + " " + sp.len);
+                    sp = new SparseDataChunk(request.getChunk());
+                }
+                HashMap hs = new HashMap();
+                ArrayList misses = new ArrayList();
+                for (Entry e : sp.getFingers().entrySet()) {
+                    if (!e.getValue().inserted) {
+                        String key = BaseEncoding.base64().encode(e.getValue().hash);
+                        if (!hs.containsKey(key)) {
+                            kv _kv = new kv();
+                            _kv.ct = 0;
+                            _kv.key = e.getValue().hash;
+                            _kv.pos = Longs.fromByteArray(e.getValue().hashloc);
+                            hs.put(key, _kv);
+                        }
+                        kv _kv = hs.get(key);
+                        _kv.ct += 1;
+                    }
+                }
+                List> futures = new ArrayList>();
+
+                for (Entry e : hs.entrySet()) {
+                    if (e.getValue().ct <= 0) {
+                        throw new IOException("Count must be positive ct=" +
+                                e.getValue().ct);
+                    }
+                    ListenableFuture lf = service.submit(() -> {
+                        long pos = DedupFileStore.addRef(e.getValue().key,
+                                e.getValue().pos, e.getValue().ct);
+                        if (pos != e.getValue().pos) {
+                            throw new IOException("Inserted Archive does not match current current=" +
+                                    pos + " interted=" + e.getValue().pos);
+                        }
+                        return pos;
+                    });
+                    futures.add(lf);
+
+                }
+                for (ListenableFuture future : futures) {
+                    future.get();
+                }
+
+                ch.setWrittenTo(true);
+                ch.getDedupFile().updateMap(sp, request.getFileLocation());
+                synchronized (ch) {
+                    long ep = sp.getFpos() + sp.len;
+                    if (ep > ch.getFile().length()) {
+                        ch.getFile().setLength(ep, false);
+                        SDFSLogger.getLog().debug("Set length to " + ep + " " + sp.len +
+                                " " + ch.getFile().length() + " for " + ch.getFile().getPath());
+                    } else {
+                        SDFSLogger.getLog()
+                                .debug("no length to " + sp.getFpos() + " " + request.getChunk().getLen() + " " + sp.len
+                                        +
+                                        " " + ch.getFile().length() + " for " + ch.getFile().getPath());
+                    }
                 }
                 responseObserver.onNext(b.build());
                 responseObserver.onCompleted();
                 return;
-            } catch (Exception e) {
+            } catch(HashWriteException e){
+                SDFSLogger.getLog().error("unable to write sparse data chunk. Missed " + e.misses.size() + " hashes");
+                b.setError("unable to write sparse data chunk");
+                for(int i =0;i misses;
+        public HashWriteException(ArrayList misses) {
+            this.misses = misses;
+
+        }
+    }
+
 }
diff --git a/src/org/opendedup/sdfs/mgmt/grpc/VolumeImp.java b/src/org/opendedup/sdfs/mgmt/grpc/VolumeImp.java
index dace8fbd6..01c76b2ed 100644
--- a/src/org/opendedup/sdfs/mgmt/grpc/VolumeImp.java
+++ b/src/org/opendedup/sdfs/mgmt/grpc/VolumeImp.java
@@ -51,7 +51,10 @@
 import org.opendedup.hashing.HashFunctionPool;
 import org.opendedup.hashing.HashFunctions;
 import org.opendedup.logging.SDFSLogger;
+import org.opendedup.sdfs.Config;
 import org.opendedup.sdfs.Main;
+import org.opendedup.sdfs.filestore.DedupFileStore;
+import org.opendedup.sdfs.filestore.MetaFileStore;
 import org.opendedup.sdfs.filestore.cloud.FileReplicationService;
 import org.opendedup.sdfs.filestore.cloud.RemoteVolumeInfo;
 import org.opendedup.sdfs.filestore.gc.ManualGC;
@@ -60,23 +63,16 @@
 import org.opendedup.sdfs.mgmt.SetWriteSpeed;
 import org.opendedup.sdfs.mgmt.SyncFSCmd;
 import org.opendedup.sdfs.mgmt.SyncFromConnectedVolume;
+import org.opendedup.sdfs.notification.SDFSEvent;
 import org.opendedup.sdfs.servers.HCServiceProxy;
 import org.opendedup.util.EncryptUtils;
 import org.opendedup.util.OSValidator;
 
 import io.grpc.stub.StreamObserver;
-import net.sf.jpam.Pam;
 
 class VolumeImpl extends VolumeServiceGrpc.VolumeServiceImplBase {
   private static final int EXPIRY_DAYS = 90;
 
-  private static Pam pam = null;
-  static {
-    if (!OSValidator.isWindows()) {
-      pam = new Pam("login");
-    }
-  }
-
   @Override
   public void getVolumeInfo(VolumeInfoRequest req, StreamObserver responseObserver) {
 
@@ -165,7 +161,9 @@ public void shutdownVolume(ShutdownRequest req, StreamObserver
     try {
       SDFSLogger.getLog().info("shutting down volume");
       System.out.println("shutting down volume");
-      System.exit(0);
+      ShutdownVol sh = new ShutdownVol();
+      Thread th = new Thread(sh);
+      th.start();
       responseObserver.onNext(b.build());
       responseObserver.onCompleted();
     } catch (Exception e) {
@@ -521,18 +519,31 @@ public void dSEInfo(DSERequest request, StreamObserver responseObse
       info.setCacheSize(HCServiceProxy.getCacheSize());
       info.setMaxCacheSize(HCServiceProxy.getMaxCacheSize());
       info.setListenEncrypted(Main.sdfsCliSSL);
-      if(Main.eChunkStoreEncryptionKey != null) {
+      if (Main.eChunkStoreEncryptionKey != null) {
         info.setEncryptionKey(Main.eChunkStoreEncryptionKey);
       } else {
-      info.setEncryptionKey(Main.chunkStoreEncryptionKey);
+        info.setEncryptionKey(Main.chunkStoreEncryptionKey);
       }
       info.setEncryptionIV(Main.chunkStoreEncryptionIV);
       info.setBucketName(HCServiceProxy.getChunkStore().getName());
       info.setMaxAge(Main.maxAge);
       if (Main.cloudAccessKey != null)
         info.setCloudAccessKey(Main.cloudAccessKey);
-      if (Main.cloudSecretKey != null)
-        info.setCloudSecretKey(Main.cloudSecretKey);
+      if (Main.eCloudSecretKey != null)
+        info.setCloudSecretKey(Main.eCloudSecretKey);
+        /*
+      CacheStats ct = HashBlobArchive.getCacheStats();
+      info.setAverageLoadPenalty(ct.averageLoadPenalty());
+      info.setEvictionCount(ct.evictionCount());
+      info.setHitCount(ct.hitCount());
+      info.setHitRate(ct.hitRate());
+      info.setLoadExceptionCount(ct.loadExceptionCount());
+      info.setLoadExceptionRate(ct.loadExceptionRate());
+      info.setMissCount(ct.missCount());
+      info.setMissRate(ct.missRate());
+      info.setRequestCount(ct.requestCount());
+      info.setTotalLoadTime(ct.totalLoadTime());
+      */
       info.build();
       b.setInfo(info);
       responseObserver.onNext(b.build());
@@ -589,8 +600,8 @@ public void deleteCloudVolume(DeleteCloudVolumeRequest request,
       return;
     }
     org.opendedup.sdfs.notification.SDFSEvent evt = org.opendedup.sdfs.notification.SDFSEvent
-        .deleteCloudVolumeEvent(request.getVolumeid());
-    Thread th = new Thread(new DeleteCloudVolume(evt, request.getVolumeid()));
+        .deleteCloudVolumeEvent(request.getPvolumeID());
+    Thread th = new Thread(new DeleteCloudVolume(evt, request.getPvolumeID()));
     th.start();
     try {
       b.setEventID(evt.uid);
@@ -659,4 +670,57 @@ public void run() {
     }
   }
 
+  private static class ShutdownVol implements Runnable {
+
+    @Override
+    public void run() {
+      SDFSEvent evt = SDFSEvent.umountEvent("Shutting down Volume");
+      SDFSLogger.getLog().info("Shutting Down SDFS");
+      SDFSLogger.getLog().info("Stopping FDISK scheduler");
+      SDFSLogger.getLog().info("Flushing and Closing Write Caches");
+      try {
+        DedupFileStore.close();
+      } catch (Exception e) {
+        System.out.println("Dedupe File store did not close correctly");
+        SDFSLogger.getLog().error("Dedupe File store did not close correctly", e);
+      }
+      SDFSLogger.getLog().info("Write Caches Flushed and Closed");
+      SDFSLogger.getLog().info("Committing open Files");
+      try {
+        MetaFileStore.close();
+      } catch (Exception e) {
+        System.out.println("Meta File store did not close correctly");
+        SDFSLogger.getLog().error("Meta File store did not close correctly", e);
+      }
+      SDFSLogger.getLog().info("Open File Committed");
+      SDFSLogger.getLog().info("Writing Config File");
+
+      SDFSLogger.getLog().info("######### Shutting down HashStore ###################");
+      try {
+        HCServiceProxy.close();
+      } catch (Exception e) {
+        System.out.println("HashStore did not close correctly");
+        SDFSLogger.getLog().error("Dedupe File store did not close correctly", e);
+      }
+      SDFSLogger.getLog().info("######### HashStore Closed ###################");
+      Main.volume.setClosedGracefully(true);
+      try {
+        Config.writeSDFSConfigFile(Main.volumeConfigFile);
+      } catch (Exception e) {
+
+      }
+      try {
+        Main.volume.setClosedGracefully(true);
+        Config.writeSDFSConfigFile(Main.volumeConfigFile);
+      } catch (Throwable e) {
+        SDFSLogger.getLog().error("Unable to write volume config.", e);
+      }
+      evt.endEvent("Volume Unmounted");
+      SDFSLogger.getLog().info("SDFS is Shut Down");
+      System.exit(0);
+
+    }
+
+  }
+
 }
diff --git a/src/org/opendedup/sdfs/mgmt/grpc/tls/DynamicTrustManager.java b/src/org/opendedup/sdfs/mgmt/grpc/tls/DynamicTrustManager.java
index 1b06284c5..1a678661d 100644
--- a/src/org/opendedup/sdfs/mgmt/grpc/tls/DynamicTrustManager.java
+++ b/src/org/opendedup/sdfs/mgmt/grpc/tls/DynamicTrustManager.java
@@ -17,14 +17,12 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.log4j.Logger;
 import org.opendedup.logging.SDFSLogger;
 
 import io.grpc.netty.shaded.io.netty.handler.ssl.ClientAuth;
 
 public class DynamicTrustManager implements X509TrustManager {
     private static final Log LOG = LogFactory.getLog(DynamicTrustManager.class);
-    private Logger logger = SDFSLogger.getLog();
     private X509TrustManager standardTrustManager = null;
     protected File trustedCertificatesDir ;
 
@@ -55,15 +53,15 @@ public DynamicTrustManager(String trustStoreDir) throws NoSuchAlgorithmException
     public void checkClientTrusted(X509Certificate[] certificates, String authType) throws CertificateException {
         SDFSLogger.getLog().error("testing 123");
         try {
-            logger.info("EASYX509 checkClientTrusted");
+            SDFSLogger.getLog().info("EASYX509 checkClientTrusted");
             standardTrustManager.checkClientTrusted(certificates, authType);
         } catch (Exception e) {
-            logger.info("EASYX509 checkClientTrusted caught exception, try to reload trust mananager.");
+            SDFSLogger.getLog().info("EASYX509 checkClientTrusted caught exception, try to reload trust mananager.");
             try {
                 loadTrustManager(ClientAuth.REQUIRE);
                 standardTrustManager.checkClientTrusted(certificates, authType);
             } catch (Exception e1) {
-                logger.info("EASYX509 checkClientTrusted caught exception");
+                SDFSLogger.getLog().info("EASYX509 checkClientTrusted caught exception");
                 throw new CertificateException("Error occurred while setting up trust manager." + e1.getCause(), e1);
             }
         }
diff --git a/src/org/opendedup/sdfs/mgmt/grpc/tls/WatchForFile.java b/src/org/opendedup/sdfs/mgmt/grpc/tls/WatchForFile.java
index 72d9dea2b..fed92a9f3 100644
--- a/src/org/opendedup/sdfs/mgmt/grpc/tls/WatchForFile.java
+++ b/src/org/opendedup/sdfs/mgmt/grpc/tls/WatchForFile.java
@@ -10,7 +10,6 @@
 import java.nio.file.WatchService;
 import java.util.List;
 
-import org.apache.log4j.Logger;
 import org.opendedup.logging.SDFSLogger;
 
 import io.grpc.netty.shaded.io.netty.handler.ssl.ClientAuth;
@@ -27,9 +26,8 @@ public WatchForFile(DynamicTrustManager tm) {
 
     public void run()
     {
-    	Logger logger = SDFSLogger.getLog();
         Path myDir= tm.trustedCertificatesDir.toPath();
-          try 
+          try
           {
               Boolean isFolder = (Boolean) Files.getAttribute(myDir,"basic:isDirectory", NOFOLLOW_LINKS);
               if (!isFolder)
@@ -42,7 +40,7 @@ public void run()
               ioe.printStackTrace();
           }
 
-          logger.info("Watching path: " + myDir);
+          SDFSLogger.getLog().info("Watching path: " + myDir);
 
         try {
            WatchService watcher = myDir.getFileSystem().newWatchService();
@@ -55,30 +53,30 @@ public void run()
 
                for (WatchEvent event : events) {
                     if (event.kind() == StandardWatchEventKinds.ENTRY_CREATE) {
-                    	logger.info("Created: " + event.kind().toString());
+                    	SDFSLogger.getLog().info("Created: " + event.kind().toString());
                     	tm.loadTrustManager(ClientAuth.REQUIRE);
                     	//ssl.trustManager(tm).build();
                     }
                     if (event.kind() == StandardWatchEventKinds.ENTRY_DELETE) {
-                    	logger.info("Delete: " + event.context().toString());
+                    	SDFSLogger.getLog().info("Delete: " + event.context().toString());
                     	tm.loadTrustManager(ClientAuth.REQUIRE);
                     	//ssl.trustManager(tm).build();
                     }
                     if (event.kind() == StandardWatchEventKinds.ENTRY_MODIFY) {
-                    	logger.info("Modify: " + event.context().toString());
+                    	SDFSLogger.getLog().info("Modify: " + event.context().toString());
                     	tm.loadTrustManager(ClientAuth.REQUIRE);
                     	//ssl.trustManager(tm).build();
                     }
                 }
-               
+
                if (!watckKey.reset()) {
                    break; // loop
                }
            }
         }
-        catch (Exception e) 
+        catch (Exception e)
         {
-        	logger.info("Error: " + e.toString());
+        	SDFSLogger.getLog().info("Error: " + e.toString());
         }
     }
 }
diff --git a/src/org/opendedup/sdfs/mgmt/mqtt/MetaDataPush.java b/src/org/opendedup/sdfs/mgmt/mqtt/MetaDataPush.java
index 7a1aec456..fbcb6cd3e 100644
--- a/src/org/opendedup/sdfs/mgmt/mqtt/MetaDataPush.java
+++ b/src/org/opendedup/sdfs/mgmt/mqtt/MetaDataPush.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com	
+ * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com
  *
  * This file is part of OpenDedupe SDFS.
  *
@@ -67,7 +67,7 @@ public MetaDataPush(String host, int port, String userName, String password, Str
 		channel = connection.createChannel();
 		channel.exchangeDeclare(this.topic, "fanout");
 		FileReplicationService.registerEvents(this);
-		
+
 		new MetaDataSubscriber(this.channel, this.topic);
 		SDFSLogger.getLog().info(String.format("Connected to MQTT %s:%d", host, port));
 	}
@@ -100,7 +100,6 @@ private void removeLock(String st) {
 					l.unlock();
 			}
 		} finally {
-			if (SDFSLogger.isDebug())
 				SDFSLogger.getLog().debug("hmpa size=" + this.activeTasks.size());
 			iLock.unlock();
 		}
@@ -330,7 +329,7 @@ public void run() {
 												SDFSLogger.getLog().info("unable to update ddb " + file + " on ", e);
 											}
 										} else {
-											
+
 											Delivery d = s.updateMap.remove(file);
 											s.channel.basicAck(d.getEnvelope().getDeliveryTag(), false);
 										}
diff --git a/src/org/opendedup/sdfs/mgmt/mqtt/VolumeEvent.java b/src/org/opendedup/sdfs/mgmt/mqtt/VolumeEvent.java
index 7b8c69511..b04b47206 100644
--- a/src/org/opendedup/sdfs/mgmt/mqtt/VolumeEvent.java
+++ b/src/org/opendedup/sdfs/mgmt/mqtt/VolumeEvent.java
@@ -6,7 +6,7 @@
 
 public class VolumeEvent implements Serializable {
 	/**
-	 * 
+	 *
 	 */
 	private static final long serialVersionUID = 1L;
 	public long volumeID;
@@ -21,20 +21,20 @@ public class VolumeEvent implements Serializable {
 	private static transient final String MFU = "mfileWritten";
 	private static transient final String DBU = "sfileWritten";
 	private static transient final String DBD = "sfileDeleted";
-	
+
 	public VolumeEvent(String jsonStr) {
 		JsonParser parser = new JsonParser();
 		obj = parser.parse(jsonStr).getAsJsonObject();
 		this.volumeID = obj.get("volumeid").getAsLong();
 		this.volumeTS = obj.get("timestamp").getAsLong();
 		if(!obj.has("internalts")) {
-			
+
 			this.internalTS = System.currentTimeMillis();
 			obj.addProperty("internalts", this.internalTS);
 		}
-		else 
+		else
 			this.internalTS = obj.get("internalts").getAsLong();
-		
+
 		this.sequence = obj.get("sequence").getAsLong();
 		this.actionType = obj.get("actionType").getAsString();
 		this.target = obj.get("object").getAsString();
@@ -47,11 +47,11 @@ public VolumeEvent(String jsonStr) {
 		obj.addProperty("target", this.target);
 		this.jsonStr = obj.toString();
 	}
-	
+
 	public String getJsonString() {
 		return this.jsonStr;
 	}
-	
+
 	public void setActionType(String actionType) {
 		this.actionType = actionType;
 		JsonParser parser = new JsonParser();
@@ -59,45 +59,45 @@ public void setActionType(String actionType) {
 		obj.addProperty("actionType", this.target);
 		this.jsonStr = obj.toString();
 	}
-	
+
 	public String getChangeID() {
 		return this.sequence + "-" + this.volumeID;
 	}
-	
+
 	public boolean isMFDelete() {
 		return actionType.equals(MFD);
 	}
-	
+
 	public boolean isMFUpdate() {
 		return actionType.equals(MFU);
 	}
-	
+
 	public boolean isDBUpdate() {
 		return actionType.equals(DBU);
 	}
 	public boolean isDBDelete() {
 		return actionType.equals(DBD);
 	}
-	
+
 	public long getVolumeID() {
 		return this.volumeID;
 	}
-	
+
 	public long getVolumeTS() {
 		return this.volumeTS;
 	}
-	
+
 	public long getInternalTS() {
 		return this.internalTS;
 	}
-	
+
 	public String getActionType() {
 		return this.actionType;
 	}
-	
+
 	public String getTarget() {
 		return this.target;
 	}
-	
-	
+
+
 }
\ No newline at end of file
diff --git a/src/org/opendedup/sdfs/mgmt/pubsub/MetaDataPush.java b/src/org/opendedup/sdfs/mgmt/pubsub/MetaDataPush.java
index b2d890bc8..d858479b7 100644
--- a/src/org/opendedup/sdfs/mgmt/pubsub/MetaDataPush.java
+++ b/src/org/opendedup/sdfs/mgmt/pubsub/MetaDataPush.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com	
+ * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com
  *
  * This file is part of OpenDedupe SDFS.
  *
@@ -87,7 +87,6 @@ public MetaDataPush(String topicName, String subName, String project, String cre
 		publisher = b.build();
 		FileReplicationService.registerEvents(this);
 
-		
 		new MetaDataSubscriber(topicName, subName, project, credsPath);
 	}
 
@@ -119,8 +118,7 @@ private void removeLock(String st) {
 					l.unlock();
 			}
 		} finally {
-			if (SDFSLogger.isDebug())
-				SDFSLogger.getLog().debug("hmpa size=" + this.activeTasks.size());
+			SDFSLogger.getLog().debug("hmpa size=" + this.activeTasks.size());
 			iLock.unlock();
 		}
 	}
diff --git a/src/org/opendedup/sdfs/monitor/VolumeIOMeter.java b/src/org/opendedup/sdfs/monitor/VolumeIOMeter.java
index a0b4c16b5..10e2fbe3c 100644
--- a/src/org/opendedup/sdfs/monitor/VolumeIOMeter.java
+++ b/src/org/opendedup/sdfs/monitor/VolumeIOMeter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com	
+ * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com
  *
  * This file is part of OpenDedupe SDFS.
  *
@@ -22,10 +22,7 @@
 
 import java.lang.management.ManagementFactory;
 
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
-import org.apache.log4j.RollingFileAppender;
-import org.opendedup.logging.JSONVolPerfLayout;
+
 import org.opendedup.logging.SDFSLogger;
 import org.opendedup.sdfs.io.Volume;
 import org.opendedup.sdfs.servers.HCServiceProxy;
@@ -41,25 +38,12 @@ public class VolumeIOMeter implements Runnable {
 			RIOPS = 0, WIOPS = 0, duplicateBytes = 0, dseSz = 0, dseCompSz = 0;
 	private double pbytesRead = 0, pbytesWritten = 0, pvirtualBytesWritten = 0,
 			pRIOPS = 0, pWIOPS = 0, pduplicateBytes = 0;
-	private Logger log = Logger.getLogger("volperflog");
 	private boolean closed = false;
 	Thread th = null;
 	UnixOperatingSystemMXBean perf = (UnixOperatingSystemMXBean) ManagementFactory
 			.getOperatingSystemMXBean();
 
 	public VolumeIOMeter(Volume vol) {
-		RollingFileAppender app = null;
-		try {
-			app = new RollingFileAppender(new JSONVolPerfLayout(),
-					vol.getPerfMonFile(), true);
-			app.setMaxBackupIndex(2);
-			app.setMaxFileSize("10MB");
-		} catch (IOException e) {
-			log.debug("unable to change appender", e);
-		}
-		this.vol = vol;
-		log.addAppender(app);
-		log.setLevel(Level.INFO);
 		th = new Thread(this);
 		th.start();
 	}
diff --git a/src/org/opendedup/sdfs/notification/SDFSEvent.java b/src/org/opendedup/sdfs/notification/SDFSEvent.java
index 392c25b3b..e6acab81d 100644
--- a/src/org/opendedup/sdfs/notification/SDFSEvent.java
+++ b/src/org/opendedup/sdfs/notification/SDFSEvent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com	
+ * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com
  *
  * This file is part of OpenDedupe SDFS.
  *
@@ -33,7 +33,6 @@
 
 import com.google.common.eventbus.EventBus;
 
-import org.opendedup.logging.SDFSEventLogger;
 import org.opendedup.logging.SDFSLogger;
 import org.opendedup.sdfs.Main;
 import org.opendedup.sdfs.io.MetaDataDedupFile;
@@ -45,7 +44,7 @@
 
 public class SDFSEvent implements java.io.Serializable {
 	/**
-	 * 
+	 *
 	 */
 	private static final long serialVersionUID = -7418485011806466368L;
 	public Type type = null;
@@ -129,7 +128,6 @@ protected SDFSEvent(Type type, String target, String shortMsg, Level level) {
 			tasks.put(uid, this);
 		}
 		this.level = level;
-		SDFSEventLogger.log(this);
 	}
 
 	public void registerListener(Object obj) {
@@ -137,7 +135,11 @@ public void registerListener(Object obj) {
 	}
 
 	public void unregisterListener(Object obj) {
-		eventBus.unregister(obj);
+		try {
+			eventBus.unregister(obj);
+		} catch (Exception e) {
+			SDFSLogger.getLog().debug("unable to unregister listener", e);
+		}
 
 	}
 
@@ -169,7 +171,6 @@ public void endEvent(String msg, Level level) {
 				this.maxCt.incrementAndGet();
 			this.curCt = this.maxCt;
 			this.endTime = System.currentTimeMillis();
-			SDFSEventLogger.log(this);
 			eventBus.post(this);
 		}
 	}
@@ -203,7 +204,6 @@ public void endEvent(String msg, Level level, Throwable e) {
 				this.maxCt.incrementAndGet();
 			this.curCt = this.maxCt;
 			this.success = false;
-			SDFSEventLogger.log(this);
 			eventBus.post(this);
 		}
 	}
@@ -218,7 +218,6 @@ public void endEvent(String msg) {
 			this.endTime = System.currentTimeMillis();
 			this.level = SDFSEvent.INFO;
 			this.curCt = this.maxCt;
-			SDFSEventLogger.log(this);
 
 			eventBus.post(this);
 		}
@@ -235,7 +234,6 @@ public void endEvent() {
 			if (this.maxCt.get() == 0)
 				this.maxCt.incrementAndGet();
 			this.curCt = this.maxCt;
-			SDFSEventLogger.log(this);
 			eventBus.post(this);
 		}
 	}
@@ -251,7 +249,6 @@ public void endErrorEvent() {
 			if (this.maxCt.get() == 0)
 				this.maxCt.incrementAndGet();
 			this.curCt = this.maxCt;
-			SDFSEventLogger.log(this);
 			eventBus.post(this);
 		}
 	}
@@ -267,7 +264,6 @@ public void endWarnEvent() {
 			if (this.maxCt.get() == 0)
 				this.maxCt.incrementAndGet();
 			this.curCt = this.maxCt;
-			SDFSEventLogger.log(this);
 			eventBus.post(this);
 		}
 	}
@@ -339,7 +335,8 @@ public static SDFSEvent syncVolEvent(String shortMsg) {
 	}
 
 	public static SDFSEvent deleteCloudVolumeEvent(long volumeid) {
-		SDFSEvent event = new DeleteCloudVolumeEvent(getTarget(), "Deleting Cloud Volume " +volumeid, RUNNING,volumeid);
+		SDFSEvent event = new DeleteCloudVolumeEvent(getTarget(), "Deleting Cloud Volume " + volumeid, RUNNING,
+				volumeid);
 		return event;
 	}
 
@@ -586,28 +583,29 @@ public Element toXML() throws ParserConfigurationException {
 
 	public org.opendedup.grpc.SDFSEventOuterClass.SDFSEvent toProtoBuf() throws IOException {
 		try {
-		org.opendedup.grpc.SDFSEventOuterClass.SDFSEvent.Builder b = org.opendedup.grpc.SDFSEventOuterClass.SDFSEvent.newBuilder();
+			org.opendedup.grpc.SDFSEventOuterClass.SDFSEvent.Builder b = org.opendedup.grpc.SDFSEventOuterClass.SDFSEvent
+					.newBuilder();
 
-		if(this.puid != null) {
-			b.setParentUuid(this.puid);
-		}
-		b.setUuid(this.uid).setExtendedInfo(this.extendedInfo).setSuccess(this.success)
-				.setStartTime(this.startTime).setEndTime(this.endTime).setLevel(this.level.toString())
-				.setType(this.type.toString()).setShortMsg(this.shortMsg).setLongMsg(this.longMsg);
-		try {
-			b.setPercentComplete(this.curCt.get() / this.maxCt.get());
+			if (this.puid != null) {
+				b.setParentUuid(this.puid);
+			}
+			b.setUuid(this.uid).setExtendedInfo(this.extendedInfo).setSuccess(this.success)
+					.setStartTime(this.startTime).setEndTime(this.endTime).setLevel(this.level.toString())
+					.setType(this.type.toString()).setShortMsg(this.shortMsg).setLongMsg(this.longMsg);
+			try {
+				b.setPercentComplete(this.curCt.get() / this.maxCt.get());
+			} catch (Exception e) {
+				b.setPercentComplete(0);
+			}
+			b.setMaxCount(this.maxCt.get()).setCurrentCount(this.curCt.get());
+			for (int i = 0; i < this.children.size(); i++) {
+				b.setChildrenUUid(i, this.children.get(i).uid);
+			}
+			return b.build();
 		} catch (Exception e) {
-			b.setPercentComplete(0);
-		}
-		b.setMaxCount(this.maxCt.get()).setCurrentCount(this.curCt.get());
-		for (int i = 0; i < this.children.size(); i++) {
-			b.setChildrenUUid(i, this.children.get(i).uid);
+			SDFSLogger.getLog().error("Unable to run", e);
+			throw new IOException(e);
 		}
-		return b.build();
-	}catch(Exception e) {
-		SDFSLogger.getLog().error("Unable to run",e);
-		throw new IOException(e);
-	}
 	}
 
 	public static List getProtoBufEvents() {
@@ -616,8 +614,8 @@ public static List getProtoBuf
 		while (iter.hasNext()) {
 			try {
 				al.add(iter.next().toProtoBuf());
-			}catch(Exception e) {
-				SDFSLogger.getLog().warn("unable to list events",e);
+			} catch (Exception e) {
+				SDFSLogger.getLog().warn("unable to list events", e);
 				throw new NullPointerException("unable to list events");
 			}
 		}
@@ -641,22 +639,21 @@ public static Element getXMLEvent(String uuid) throws ParserConfigurationExcepti
 			if (tasks.containsKey(uuid))
 				return tasks.get(uuid).toXML();
 			else
-				throw new NullPointerException("["+uuid + "] could not be found");
+				throw new NullPointerException("[" + uuid + "] could not be found");
 		}
 	}
 
 	public static org.opendedup.grpc.SDFSEventOuterClass.SDFSEvent getPotoBufEvent(String uuid) {
 		synchronized (tasks) {
 			if (tasks.containsKey(uuid)) {
-				try{
-				return tasks.get(uuid).toProtoBuf();
-				}catch(Exception e) {
-					SDFSLogger.getLog().warn("["+uuid + "] could not be found",e);
-					throw new NullPointerException("["+uuid + "] could not be found");
+				try {
+					return tasks.get(uuid).toProtoBuf();
+				} catch (Exception e) {
+					SDFSLogger.getLog().warn("[" + uuid + "] could not be found", e);
+					throw new NullPointerException("[" + uuid + "] could not be found");
 				}
-			}
-			else
-				throw new NullPointerException("["+uuid + "] could not be found");
+			} else
+				throw new NullPointerException("[" + uuid + "] could not be found");
 		}
 	}
 
@@ -665,7 +662,7 @@ public static SDFSEvent getEvent(String uuid) {
 			if (tasks.containsKey(uuid))
 				return tasks.get(uuid);
 			else
-				throw new NullPointerException("["+uuid + "] could not be found");
+				throw new NullPointerException("[" + uuid + "] could not be found");
 		}
 	}
 
@@ -685,7 +682,7 @@ public static Element getXMLEvents() throws ParserConfigurationException {
 
 	public static class Level implements java.io.Serializable {
 		/**
-		 * 
+		 *
 		 */
 		private static final long serialVersionUID = -2246117933197717794L;
 		private String type = "";
@@ -702,7 +699,7 @@ public String toString() {
 
 	public static class Type implements java.io.Serializable {
 		/**
-		 * 
+		 *
 		 */
 		private static final long serialVersionUID = 1L;
 		private String type = "";
diff --git a/src/org/opendedup/sdfs/servers/HCServiceProxy.java b/src/org/opendedup/sdfs/servers/HCServiceProxy.java
index f2e884904..05a9600ec 100755
--- a/src/org/opendedup/sdfs/servers/HCServiceProxy.java
+++ b/src/org/opendedup/sdfs/servers/HCServiceProxy.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com	
+ * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com
  *
  * This file is part of OpenDedupe SDFS.
  *
@@ -27,7 +27,6 @@
 import org.opendedup.collections.DataArchivedException;
 import org.opendedup.collections.HashtableFullException;
 import org.opendedup.collections.InsertRecord;
-import org.opendedup.grpc.FileInfo.syncaction;
 import org.opendedup.logging.SDFSLogger;
 import org.opendedup.mtools.FDiskException;
 import org.opendedup.sdfs.Main;
@@ -45,19 +44,15 @@ public class HCServiceProxy {
 	public static HashChunkServiceInterface hcService = null;
 	private static EventBus eventBus = new EventBus();
 
-	
-
 	// private static boolean initialized = false;
-	
-
 
 	public static void registerListener(Object obj) {
 		eventBus.register(obj);
 	}
 
-	public static synchronized long processHashClaims(SDFSEvent evt,boolean compact) throws IOException {
-			return hcService.processHashClaims(evt,compact);
-		
+	public static synchronized long processHashClaims(SDFSEvent evt, boolean compact) throws IOException {
+		return hcService.processHashClaims(evt, compact);
+
 	}
 
 	public static synchronized void compactDB() throws IOException {
@@ -70,8 +65,7 @@ public static void clearRefMap() throws IOException {
 	}
 
 	public static synchronized boolean hashExists(byte[] hash, String guid) throws IOException, HashtableFullException {
-		
-		
+
 		long pos = hcService.hashExists(hash);
 		if (pos != -1)
 			return true;
@@ -84,32 +78,32 @@ public static HashChunk fetchHashChunk(byte[] hash) throws IOException, DataArch
 	}
 
 	public static synchronized long getCacheSize() {
-			return hcService.getCacheSize();
+		return hcService.getCacheSize();
 	}
 
 	public static synchronized long getMaxCacheSize() {
-			return hcService.getMaxCacheSize();
-		
+		return hcService.getMaxCacheSize();
+
 	}
 
 	public static synchronized int getReadSpeed() {
-			return hcService.getReadSpeed();
+		return hcService.getReadSpeed();
 	}
 
 	public static synchronized int getWriteSpeed() {
-			return hcService.getWriteSpeed();
+		return hcService.getWriteSpeed();
 	}
 
 	public static synchronized void setReadSpeed(int speed) {
-			hcService.setReadSpeed(speed);
+		hcService.setReadSpeed(speed);
 	}
 
 	public static synchronized void setWriteSpeed(int speed) {
-			hcService.setWriteSpeed(speed);
+		hcService.setWriteSpeed(speed);
 	}
 
 	public static synchronized void setCacheSize(long sz) throws IOException {
-			hcService.setCacheSize(sz);
+		hcService.setCacheSize(sz);
 	}
 
 	public static synchronized void setDseSize(long sz) throws IOException {
@@ -117,123 +111,125 @@ public static synchronized void setDseSize(long sz) throws IOException {
 	}
 
 	public static long claimKey(byte[] key, long val, long ct) throws IOException {
-			
-				return hcService.claimKey(key, val, ct);
+
+		return hcService.claimKey(key, val, ct);
 	}
 
 	public static long getChunksFetched() {
 		return -1;
 	}
 
-	public static synchronized void init(ArrayList volumes) {
+	public static synchronized void init(ArrayList volumes) throws InterruptedException {
 		try {
-				/*
-				File file = new File(Main.hashDBStore + File.separator + ".lock");
-				if(file.exists()) {
-					SDFSLogger.getLog().fatal("lock file exists " + file.getPath());
-					SDFSLogger.getLog().fatal("Please remove lock file to proceed");
-					System.out.println("lock file exists " + file.getPath());
-					System.out.println("Please remove lock file to proceed");
-					System.exit(2);
-				}
-				*/
-				SDFSLogger.getLog().info("Starting local chunkstore");
-				
+			/*
+			 * File file = new File(Main.hashDBStore + File.separator + ".lock");
+			 * if(file.exists()) {
+			 * SDFSLogger.getLog().fatal("lock file exists " + file.getPath());
+			 * SDFSLogger.getLog().fatal("Please remove lock file to proceed");
+			 * System.out.println("lock file exists " + file.getPath());
+			 * System.out.println("Please remove lock file to proceed");
+			 * System.exit(2);
+			 * }
+			 */
+			SDFSLogger.getLog().info("Starting local chunkstore");
+			try {
 				hcService = new HashChunkService();
 				hcService.init();
-				
-				if (Main.runConsistancyCheck) {
-					hcService.runConsistancyCheck();
-				}
+			} catch (InterruptedException e) {
+				SDFSLogger.getLog().info(e.getMessage());
+			}
 
-				if (Main.syncDL) {
-					long vol = Main.DSEID;
-					if(Main.syncDLAll) {
-						vol = -1;
-					}
-					SDFSEvent evt = SDFSEvent.syncVolEvent("Syncing from [" + vol + "]");
-					eventBus.post(new CloudSyncDLRequest(vol, true, false,evt));
+			if (Main.runConsistancyCheck) {
+				hcService.runConsistancyCheck();
+			}
+
+			if (Main.syncDL) {
+				long vol = Main.DSEID;
+				if (Main.syncDLAll) {
+					vol = -1;
 				}
-				touchRunFile();
-			
+				SDFSEvent evt = SDFSEvent.syncVolEvent("Syncing from [" + vol + "]");
+				eventBus.post(new CloudSyncDLRequest(vol, true, false, evt));
+			}
+			touchRunFile();
+
 		} catch (Exception e) {
 			SDFSLogger.getLog().error("Unable to initialize HashChunkService ", e);
 			System.err.println("Unable to initialize HashChunkService ");
 			e.printStackTrace();
-			System.exit(-1);
+			if (Main.sdfsSyncEnabled) {
+				throw new InterruptedException("Exception occured while syncSDFS is enabled. " + e);
+			} else {
+				System.exit(-1);
+			}
 		}
 	}
 
-	public static void syncVolume(long volumeID, boolean syncMap,SDFSEvent evt) {
-			eventBus.post(new CloudSyncDLRequest(volumeID, syncMap, true,evt));
+	public static void syncVolume(long volumeID, boolean syncMap, SDFSEvent evt) {
+		eventBus.post(new CloudSyncDLRequest(volumeID, syncMap, true, evt));
 	}
 
 	public static byte getDseCount() {
 		return 1;
-		
+
 	}
 
-	public static boolean mightContainKey(byte[] key, String guid,long id) {
-		return hcService.mightContainKey(key,id);
+	public static boolean mightContainKey(byte[] key, String guid, long id) {
+		return hcService.mightContainKey(key, id);
 	}
 
 	public static AbstractHashesMap getHashesMap() {
-			return hcService.getHashesMap();
+		return hcService.getHashesMap();
 	}
 
 	public static long getSize() {
-			return hcService.getSize();
-		
+		return hcService.getSize();
+
 	}
 
 	public static long getDSESize() {
-			return HCServiceProxy.getChunkStore().size();
-		
+		return HCServiceProxy.getChunkStore().size();
+
 	}
 
 	public static long getDSECompressedSize() {
-			return HCServiceProxy.getChunkStore().compressedSize();
-		
+		return HCServiceProxy.getChunkStore().compressedSize();
+
 	}
 
 	public static long getDSEMaxSize() {
-			return HCServiceProxy.getChunkStore().maxSize();
-		
+		return HCServiceProxy.getChunkStore().maxSize();
+
 	}
 
 	public static long getMaxSize() {
-			return HCServiceProxy.hcService.getMaxSize();
-		
+		return HCServiceProxy.hcService.getMaxSize();
+
 	}
 
 	public static long getFreeBlocks() {
-			return HCServiceProxy.getChunkStore().getFreeBlocks();
-		
+		return HCServiceProxy.getChunkStore().getFreeBlocks();
+
 	}
 
 	public static AbstractChunkStore getChunkStore() {
-			return hcService.getChuckStore();
-		
+		return hcService.getChuckStore();
+
 	}
 
 	public static int getPageSize() {
-			return HCServiceProxy.hcService.getPageSize();
+		return HCServiceProxy.hcService.getPageSize();
 	}
 
 	public static void sync() throws IOException {
-			hcService.sync();
+		hcService.sync();
 	}
 
-	
-
-	
-
 	public static InsertRecord writeChunk(byte[] hash, byte[] aContents, int ct, String uuid)
 			throws IOException, HashtableFullException {
-			// doop = HCServiceProxy.hcService.hashExists(hash);
-			
-				return HCServiceProxy.hcService.writeChunk(hash, aContents, false, ct,uuid);
-		
+		// doop = HCServiceProxy.hcService.hashExists(hash);
+
+		return HCServiceProxy.hcService.writeChunk(hash, aContents, false, ct, uuid);
 
 	}
 
@@ -242,7 +238,7 @@ public static InsertRecord writeChunk(byte[] hash, byte[] aContents, int ct, Str
 	 * ignoredHosts) throws IOException, HashtableFullException { if
 	 * (Main.chunkStoreLocal) { // doop = HCServiceProxy.hcService.hashExists(hash);
 	 * return HCServiceProxy.hcService.writeChunk(hash, aContents, false); } else {
-	 * 
+	 *
 	 * try { if (ignoredHosts != null) { WriteHashCmd cmd = new WriteHashCmd(hash,
 	 * aContents, false, Main.volume.getClusterCopies(), ignoredHosts);
 	 * cmd.executeCmd(socket); return new InsertRecord(true,cmd.reponse()); } else {
@@ -251,7 +247,7 @@ public static InsertRecord writeChunk(byte[] hash, byte[] aContents, int ct, Str
 	 * InsertRecord(true,cmd.reponse()); } } catch (Exception e1) { //
 	 * SDFSLogger.getLog().fatal("Unable to write chunk " + hash, // e1); throw new
 	 * IOException("Unable to write chunk " + hash); } finally {
-	 * 
+	 *
 	 * } } }
 	 */
 
@@ -271,29 +267,27 @@ public static void runFDisk(FDiskEvent evt) throws FDiskException, IOException {
 	public static long hashExists(byte[] hash)
 			throws IOException, HashtableFullException {
 
-			return HCServiceProxy.hcService.hashExists(hash);
+		return HCServiceProxy.hcService.hashExists(hash);
 
-		
 	}
 
-
 	public static byte[] fetchChunk(byte[] hash, byte[] hashloc, boolean direct)
 			throws IOException, DataArchivedException {
 
-			byte[] data = null;
-			long pos = -1;
-			if (direct) {
-				pos = Longs.fromByteArray(hashloc);
-			}
+		byte[] data = null;
+		long pos = -1;
+		if (direct) {
+			pos = Longs.fromByteArray(hashloc);
+		}
+
+		data = HCServiceProxy.hcService.fetchChunk(hash, pos).getData();
 
-			data = HCServiceProxy.hcService.fetchChunk(hash, pos).getData();
+		return data;
 
-			return data;
-		
 	}
 
 	public static void cacheData(long pos) throws IOException, DataArchivedException {
-			HCServiceProxy.hcService.cacheChunk(pos);
+		HCServiceProxy.hcService.cacheChunk(pos);
 	}
 
 	public static long getChunksRead() {
@@ -336,12 +330,20 @@ private static void touchRunFile() {
 		}
 	}
 
-	public static String restoreBlock(byte[] hash,long id) throws IOException {
-		return hcService.restoreBlock(hash,id);
+	public static String restoreBlock(byte[] hash, long id) throws IOException {
+		return hcService.restoreBlock(hash, id);
 	}
 
 	public static boolean blockRestored(String id) throws IOException {
 		return hcService.blockRestored(id);
 	}
 
+	public static boolean get_move_blob() {
+		return hcService.get_move_blob();
+	}
+
+	public static void set_move_blob(boolean status) {
+		hcService.set_move_blob(status);
+	}
+
 }
diff --git a/src/org/opendedup/sdfs/servers/HashChunkService.java b/src/org/opendedup/sdfs/servers/HashChunkService.java
index a7cc06a8e..a29b6640b 100755
--- a/src/org/opendedup/sdfs/servers/HashChunkService.java
+++ b/src/org/opendedup/sdfs/servers/HashChunkService.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com	
+ * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com
  *
  * This file is part of OpenDedupe SDFS.
  *
@@ -58,7 +58,7 @@ public long getChunksFetched() {
 
 	}
 
-	public HashChunkService() {
+	public HashChunkService() throws InterruptedException {
 		try {
 			fileStore = (AbstractChunkStore) Class
 					.forName(Main.chunkStoreClass).newInstance();
@@ -67,10 +67,16 @@ public HashChunkService() {
 			SDFSLogger.getLog().fatal("Unable to initiate ChunkStore", e);
 			System.err.println("Unable to initiate ChunkStore");
 			e.printStackTrace();
-			System.exit(-1);
+			if (Main.sdfsSyncEnabled) {
+				throw new InterruptedException("Exception occured while syncSDFS is enabled. " + e);
+			} else {
+				System.exit(-1);
+			}
 		}
 		try {
 			hs = new HashStore(this);
+		} catch (InterruptedException e) {
+			throw new InterruptedException(e.getMessage());
 		} catch (Exception e) {
 			SDFSLogger.getLog().fatal("unable to start hashstore", e);
 			System.err.println("Unable to initiate hashstore");
@@ -90,14 +96,14 @@ public AbstractHashesMap getHashesMap() {
 	}
 
 	public InsertRecord writeChunk(byte[] hash, byte[] aContents,
-			boolean compressed,long ct,String uuid) throws IOException, HashtableFullException {
+			boolean compressed, long ct, String uuid) throws IOException, HashtableFullException {
 		if (aContents.length > Main.chunkStorePageSize)
 			throw new IOException("content size out of bounds ["
 					+ aContents.length + "] > [" + Main.chunkStorePageSize
 					+ "]");
 		chunksRead++;
 		InsertRecord written = hs.addHashChunk(new HashChunk(hash, aContents,
-				compressed,ct,uuid));
+				compressed, ct, uuid));
 		if (written.getInserted()) {
 			unComittedChunks++;
 			chunksWritten++;
@@ -110,6 +116,7 @@ public InsertRecord writeChunk(byte[] hash, byte[] aContents,
 		}
 		return written;
 	}
+
 	@Override
 	public void clearRefMap() throws IOException {
 		hs.clearRefMap();
@@ -131,16 +138,14 @@ public void setDseSize(long sz) throws IOException {
 		hs.bdb.setMaxSize(sz);
 	}
 
-	
-
 	public long hashExists(byte[] hash) throws IOException,
 			HashtableFullException {
 		return hs.hashExists(hash);
 	}
 
-	public HashChunk fetchChunk(byte[] hash,long pos) throws IOException,
+	public HashChunk fetchChunk(byte[] hash, long pos) throws IOException,
 			DataArchivedException {
-		HashChunk hashChunk = hs.getHashChunk(hash,pos);
+		HashChunk hashChunk = hs.getHashChunk(hash, pos);
 		byte[] data = hashChunk.getData();
 		kBytesFetched = kBytesFetched + (data.length / KBYTE);
 		chunksFetched++;
@@ -163,8 +168,8 @@ public byte getHashRoute(byte[] hash) {
 		return hashRoute;
 	}
 
-	public long processHashClaims(SDFSEvent evt,boolean compact) throws IOException {
-		return hs.processHashClaims(evt,compact);
+	public long processHashClaims(SDFSEvent evt, boolean compact) throws IOException {
+		return hs.processHashClaims(evt, compact);
 	}
 
 	public void commitChunks() {
@@ -212,7 +217,7 @@ public void close() {
 	}
 
 	public void init() throws IOException {
-		
+
 	}
 
 	@Override
@@ -250,8 +255,8 @@ public int getWriteSpeed() {
 	}
 
 	@Override
-	public String restoreBlock(byte[] hash,long id) throws IOException {
-		return hs.restoreBlock(hash,id);
+	public String restoreBlock(byte[] hash, long id) throws IOException {
+		return hs.restoreBlock(hash, id);
 	}
 
 	@Override
@@ -262,26 +267,35 @@ public boolean blockRestored(String id) throws IOException {
 	@Override
 	public RemoteVolumeInfo[] getConnectedVolumes() throws IOException {
 		if (fileStore instanceof AbstractCloudFileSync) {
-			AbstractCloudFileSync af = (AbstractCloudFileSync)fileStore;
+			AbstractCloudFileSync af = (AbstractCloudFileSync) fileStore;
 			return af.getConnectedVolumes();
 		} else
 			return null;
 	}
 
 	@Override
-	public boolean mightContainKey(byte[] key,long id) {
-		return hs.mightContainKey(key,id);
+	public boolean mightContainKey(byte[] key, long id) {
+		return hs.mightContainKey(key, id);
 	}
 
 	@Override
-	public long claimKey(byte[] key,long val,long ct) throws IOException {
-		return hs.claimKey(key,val,ct);
+	public long claimKey(byte[] key, long val, long ct) throws IOException {
+		return hs.claimKey(key, val, ct);
 	}
 
 	@Override
 	public void compactDB() throws IOException {
 		hs.compactDB();
-		
+
+	}
+	@Override
+	public boolean get_move_blob() {
+		return hs.get_move_blob();
+	}
+
+	@Override
+	public void set_move_blob(boolean status) {
+		hs.set_move_blob(status);
 	}
 
 }
diff --git a/src/org/opendedup/sdfs/servers/HashChunkServiceInterface.java b/src/org/opendedup/sdfs/servers/HashChunkServiceInterface.java
index bd7648d0c..a6bb4a3d0 100644
--- a/src/org/opendedup/sdfs/servers/HashChunkServiceInterface.java
+++ b/src/org/opendedup/sdfs/servers/HashChunkServiceInterface.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com	
+ * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com
  *
  * This file is part of OpenDedupe SDFS.
  *
@@ -38,20 +38,24 @@ public interface HashChunkServiceInterface {
 	public abstract String restoreBlock(byte[] hash,long id) throws IOException;
 
 	public abstract boolean blockRestored(String id) throws IOException;
-	
+
+	public abstract boolean get_move_blob();
+
+	public abstract void set_move_blob(boolean status);
+
 	public abstract boolean mightContainKey(byte [] key,long id);
 
 	public abstract long getChunksFetched();
 
 	public abstract AbstractChunkStore getChuckStore();
-	
+
 	public abstract long claimKey(byte [] key,long val,long ct) throws IOException;
-	
+
 
 	public abstract InsertRecord writeChunk(byte[] hash, byte[] aContents,
 			boolean compressed,long ct,String uuid) throws IOException, HashtableFullException;
 
-	
+
 
 	public abstract long hashExists(byte[] hash) throws IOException,
 			HashtableFullException;
@@ -109,7 +113,7 @@ public abstract void cacheChunk(long pos) throws IOException,
 	public abstract int getWriteSpeed();
 
 	public abstract void setCacheSize(long sz) throws IOException;
-	
+
 	public abstract void setDseSize(long sz) throws IOException;
 
 	public abstract RemoteVolumeInfo[] getConnectedVolumes() throws IOException;
diff --git a/src/org/opendedup/sdfs/servers/SDFSService.java b/src/org/opendedup/sdfs/servers/SDFSService.java
index 3633e637e..5455c8d38 100644
--- a/src/org/opendedup/sdfs/servers/SDFSService.java
+++ b/src/org/opendedup/sdfs/servers/SDFSService.java
@@ -46,6 +46,7 @@ public static boolean isStopped() {
 	public SDFSService(String configFile, ArrayList volumes) {
 
 		this.configFile = configFile;
+		Main.volumeConfigFile = configFile;
 		this.volumes = volumes;
 		String ts = "";
 		Properties props = new Properties();
@@ -74,6 +75,7 @@ public void start(int port, String password,boolean disableSSL) throws Exception
 			System.err.println("Exiting");
 			System.exit(-1);
 		}
+		SDFSLogger.createSdfsLogger();
 		SDFSLogger.getLog().debug("############# SDFSService Starting ##################");
 
 		Main.mountEvent = SDFSEvent
diff --git a/src/org/opendedup/sdfs/windows/fs/MountSDFS.java b/src/org/opendedup/sdfs/windows/fs/MountSDFS.java
index ab0659322..deee18046 100644
--- a/src/org/opendedup/sdfs/windows/fs/MountSDFS.java
+++ b/src/org/opendedup/sdfs/windows/fs/MountSDFS.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com	
+ * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com
  *
  * This file is part of OpenDedupe SDFS.
  *
@@ -33,7 +33,6 @@
 import org.apache.commons.cli.PosixParser;
 import org.opendedup.sdfs.Main;
 import org.opendedup.sdfs.servers.SDFSService;
-import org.opendedup.sdfs.windows.utils.DriveIcon;
 import org.opendedup.util.OSValidator;
 
 public class MountSDFS {
@@ -44,6 +43,7 @@ public static Options buildOptions() {
 		options.addOption("v", true, "sdfs volume to mount \ne.g. dedup");
 		options.addOption("p", true, "port to use for sdfs cli");
 		options.addOption("e", true, "password to decrypt config");
+		options.addOption("j", true, "environmental variable to decrypt config");
 		options.addOption("d", false, "turn on filesystem debugging");
 		options.addOption("nm", false, "disable drive mount");
 		options.addOption("cfr", false, "Restores files from cloud storage if the backend cloud store supports it");
@@ -57,6 +57,7 @@ public static Options buildOptions() {
 		options.addOption("rv", true,
 				"comma separated list of remote volumes that should also be accounted for when doing garbage collection. "
 						+ "If not entered the volume will attempt to identify other volumes in the cluster.");
+		options.addOption("use-portredirector", false, "Disables TLS and forces localhost");
 		options.addOption("h", false, "display available options");
 		return options;
 	}
@@ -99,6 +100,10 @@ public static void main(String[] args)
 		if (cmd.hasOption("e")) {
 			password = cmd.getOptionValue("e");
 		}
+		if (cmd.hasOption("j")) {
+			String jv = cmd.getOptionValue("j");
+			password = System.getenv(jv);
+		}
 		if (cmd.hasOption("cfr")) {
 			Main.syncDL = true;
 			Main.runConsistancyCheck = true;
@@ -141,7 +146,10 @@ public static void main(String[] args)
 			}
 			volumeConfigFile = f.getPath();
 		}
-		
+		if(cmd.hasOption("use-portredirector")) {
+			Main.usePortRedirector = true;
+		}
+
 
 		if (volumeConfigFile == null) {
 			System.out.println("error : volume or path to volume configuration file not defined");
@@ -182,7 +190,7 @@ public static void main(String[] args)
 					// System.out.println(sFal[i]);
 				}
 				try {
-					DriveIcon.addIcon(cmd.getOptionValue("m"));
+					//DriveIcon.addIcon(cmd.getOptionValue("m"));
 				} catch (Exception e) {
 					e.printStackTrace();
 					System.err.println("Unable to add icon for drive " + cmd.getOptionValue("m"));
diff --git a/src/org/opendedup/sdfs/windows/fs/ShutdownHook.java b/src/org/opendedup/sdfs/windows/fs/ShutdownHook.java
index f970fb242..624856c8a 100644
--- a/src/org/opendedup/sdfs/windows/fs/ShutdownHook.java
+++ b/src/org/opendedup/sdfs/windows/fs/ShutdownHook.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com	
+ * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com
  *
  * This file is part of OpenDedupe SDFS.
  *
@@ -21,7 +21,6 @@
 import net.decasdev.dokan.Dokan;
 
 import org.opendedup.sdfs.servers.SDFSService;
-import org.opendedup.sdfs.windows.utils.DriveIcon;
 
 class ShutdownHook extends Thread {
 	private SDFSService service;
@@ -46,7 +45,7 @@ public void run() {
 			e.printStackTrace();
 		} finally {
 			try {
-				DriveIcon.deleteIcon(driveLetter);
+				//DriveIcon.deleteIcon(driveLetter);
 			} catch (Exception e) {
 				// TODO Auto-generated catch block
 				e.printStackTrace();
diff --git a/src/org/opendedup/sdfs/windows/fs/WinSDFS.java b/src/org/opendedup/sdfs/windows/fs/WinSDFS.java
index 9432af463..b93de70a1 100644
--- a/src/org/opendedup/sdfs/windows/fs/WinSDFS.java
+++ b/src/org/opendedup/sdfs/windows/fs/WinSDFS.java
@@ -44,7 +44,6 @@
 import net.decasdev.dokan.WinError;
 import net.decasdev.dokan.FileFlag;
 
-import org.apache.log4j.Logger;
 import org.opendedup.logging.SDFSLogger;
 import org.opendedup.sdfs.Main;
 import org.opendedup.sdfs.filestore.MetaFileStore;
@@ -68,7 +67,6 @@ public class WinSDFS implements DokanOperations {
 	long rootLastWrite = rootCreateTime;
 	private static String mountedVolume = null;
 	private static String driveLetter = "S:\\";
-	private static Logger log = SDFSLogger.getFSLog();
 	static ConcurrentHashMap dedupChannels = new ConcurrentHashMap();
 	// private static RejectedExecutionHandler executionHandler = new
 	// BlockPolicy();
@@ -86,11 +84,11 @@ public class WinSDFS implements DokanOperations {
 	 * EvictionListener() { // This method is called
 	 * just after a new entry has been // added public void onEviction(String
 	 * key, DedupFileChannel ch) {
-	 * 
+	 *
 	 * try { ch.close(); } catch (IOException e) { }
-	 * 
+	 *
 	 * } }
-	 * 
+	 *
 	 * ).build();
 	 */
 
@@ -106,10 +104,7 @@ void showVersions() {
 	}
 
 	void mount(String _driveLetter, String _mountedVolume, boolean debug) {
-		if (debug)
-			SDFSLogger.setFSLevel(0);
-		else
-			SDFSLogger.setFSLevel(1);
+
 		mountedVolume = _mountedVolume;
 		driveLetter = _driveLetter;
 		DokanOptions dokanOptions = new DokanOptions();
@@ -118,7 +113,7 @@ void mount(String _driveLetter, String _mountedVolume, boolean debug) {
 		dokanOptions.metaFilePath = mountedVolume;
 		dokanOptions.optionsMode = DokanOptionsMode.Mode.REMOVABLE_DRIVE.getValue();
 		// dokanOptions.uncPath = "\\opendedupe\\awesome";
-		log.info("######## mounting " + mountedVolume + " to " + driveLetter + " #############");
+		SDFSLogger.getFSLog().info("######## mounting " + mountedVolume + " to " + driveLetter + " #############");
 		System.out.println("");
 		System.out.println("volumemounted");
 		System.out.println("");
@@ -126,7 +121,7 @@ void mount(String _driveLetter, String _mountedVolume, boolean debug) {
 
 		if (result < 0) {
 			System.out.println("Unable to mount volume because result = " + result);
-			log.error("Unable to mount volume because result = " + result);
+			SDFSLogger.getFSLog().error("Unable to mount volume because result = " + result);
 			if (result == -1)
 				System.out.println("General Error");
 			if (result == -2)
@@ -150,7 +145,8 @@ void mount(String _driveLetter, String _mountedVolume, boolean debug) {
 
 				}
 			}
-			log.info("######## unmounted " + mountedVolume + " from " + driveLetter + " #############");
+			SDFSLogger.getFSLog()
+					.info("######## unmounted " + mountedVolume + " from " + driveLetter + " #############");
 			System.exit(1);
 		}
 	}
@@ -162,11 +158,12 @@ static synchronized long getNextHandle() {
 	}
 
 	private void checkLocal(String fileName) throws DokanOperationException {
-		if(!new File(mountedVolume + fileName).getPath().startsWith(mountedVolume)) {
-			log.error("access denied to " +new File(mountedVolume + fileName).getPath());
-			throw new DokanOperationException(WinError.ERROR_ACCESS_DENIED); 
+		if (!new File(mountedVolume + fileName).getPath().startsWith(mountedVolume)) {
+			SDFSLogger.getFSLog().error("access denied to " + new File(mountedVolume + fileName).getPath());
+			throw new DokanOperationException(WinError.ERROR_ACCESS_DENIED);
 		}
 	}
+
 	@Override
 	public long onCreateFile(String fileName, int desiredAccess, int shareMode, int creationDisposition,
 			int flagsAndAttributes, int createOptions, DokanFileInfo fileInfo) throws DokanOperationException {
@@ -179,7 +176,7 @@ public long onCreateFile(String fileName, int desiredAccess, int shareMode, int
 
 				executor.execute(sn);
 			} catch (RejectedExecutionException e) {
-				log.warn("Threads exhausted");
+				SDFSLogger.getFSLog().warn("Threads exhausted");
 				Thread th = new Thread(sn);
 				th.start();
 			}
@@ -190,20 +187,22 @@ public long onCreateFile(String fileName, int desiredAccess, int shareMode, int
 				if (!sn.done) {
 					z++;
 					Dokan.resetTimeout(RESET_DURATION, fileInfo);
-					log.debug("onCreateFile did not finish in " + (z * CHANNEL_TIMEOUT) / 1000 + " seconds. slow io."
-							+ fileInfo.handle);
+					SDFSLogger.getFSLog()
+							.debug("onCreateFile did not finish in " + (z * CHANNEL_TIMEOUT) / 1000
+									+ " seconds. slow io."
+									+ fileInfo.handle);
 				}
 			}
 			if (sn.errRtn != null)
 				throw sn.errRtn;
-			log.debug("fn=" + fileName + " handle=" + sn.nextHandle);
+			SDFSLogger.getFSLog().debug("fn=" + fileName + " handle=" + sn.nextHandle);
 			return sn.nextHandle;
 
 		} catch (DokanOperationException e) {
-			log.debug("dokan error " + fileName, e);
+			SDFSLogger.getFSLog().debug("dokan error " + fileName, e);
 			throw e;
 		} catch (Exception e) {
-			log.error("unable to create file ", e);
+			SDFSLogger.getFSLog().error("unable to create file ", e);
 			throw new DokanOperationException(WinError.ERROR_INVALID_FUNCTION);
 		}
 	}
@@ -212,8 +211,8 @@ public long onCreateFile(String fileName, int desiredAccess, int shareMode, int
 	public void onCleanup(String fileName, DokanFileInfo arg1) throws DokanOperationException {
 		if (!fileName.equals("\\")) {
 			try {
-				if (SDFSLogger.isFSDebug())
-					log.debug("[onCleanup] " + fileName);
+
+				SDFSLogger.getFSLog().debug("[onCleanup] " + fileName);
 				SyncThread sn = new SyncThread();
 				sn.fileName = fileName;
 				sn.info = arg1;
@@ -222,7 +221,7 @@ public void onCleanup(String fileName, DokanFileInfo arg1) throws DokanOperation
 
 					executor.execute(sn);
 				} catch (RejectedExecutionException e) {
-					log.warn("Threads exhausted");
+					SDFSLogger.getFSLog().warn("Threads exhausted");
 					Thread th = new Thread(sn);
 					th.start();
 				}
@@ -233,18 +232,19 @@ public void onCleanup(String fileName, DokanFileInfo arg1) throws DokanOperation
 					if (!sn.done) {
 						z++;
 						Dokan.resetTimeout(RESET_DURATION, arg1);
-						log.debug("sync did not finish in " + (z * CHANNEL_TIMEOUT) / 1000 + " seconds. slow io."
-								+ arg1.handle);
+						SDFSLogger.getFSLog()
+								.debug("sync did not finish in " + (z * CHANNEL_TIMEOUT) / 1000 + " seconds. slow io."
+										+ arg1.handle);
 					}
 				}
 				if (sn.errRtn != null)
 					throw sn.errRtn;
-				
+
 				this.onCloseFile(fileName, arg1);
 			} catch (DokanOperationException e) {
 				throw e;
 			} catch (Exception e) {
-				log.error("unable to cleanup file " + fileName, e);
+				SDFSLogger.getFSLog().error("unable to cleanup file " + fileName, e);
 				throw new DokanOperationException(ERROR_WRITE_FAULT);
 			}
 		}
@@ -254,8 +254,7 @@ public void onCleanup(String fileName, DokanFileInfo arg1) throws DokanOperation
 	public void onCloseFile(String path, DokanFileInfo arg1) throws DokanOperationException {
 		if (!path.equals("\\")) {
 			try {
-				if (SDFSLogger.isFSDebug())
-					log.debug("[onClose] " + path);
+				SDFSLogger.getFSLog().debug("[onClose] " + path);
 				this.closeFileChannel(arg1.handle, arg1);
 				if (arg1.deleteOnClose) {
 					this.onDeleteFile(path, arg1);
@@ -263,7 +262,7 @@ public void onCloseFile(String path, DokanFileInfo arg1) throws DokanOperationEx
 			} catch (DokanOperationException e) {
 				throw e;
 			} catch (Exception e) {
-				log.error("unable to close file " + path, e);
+				SDFSLogger.getFSLog().error("unable to close file " + path, e);
 			}
 		}
 	}
@@ -273,8 +272,8 @@ public int onReadFile(String fileName, ByteBuffer buf, long offset, DokanFileInf
 			throws DokanOperationException {
 
 		try {
-			if (SDFSLogger.isFSDebug())
-				log.debug("[onReadFile] " + fileName + " " + offset + " " + buf.capacity() + " " + buf.position());
+			SDFSLogger.getFSLog()
+					.debug("[onReadFile] " + fileName + " " + offset + " " + buf.capacity() + " " + buf.position());
 			ReadThread wr = new ReadThread();
 			wr.buf = buf;
 			wr.info = arg3;
@@ -285,7 +284,7 @@ public int onReadFile(String fileName, ByteBuffer buf, long offset, DokanFileInf
 
 				executor.execute(wr);
 			} catch (RejectedExecutionException e) {
-				log.warn("Threads exhausted");
+				SDFSLogger.getFSLog().warn("Threads exhausted");
 				Thread th = new Thread(wr);
 				th.start();
 			}
@@ -296,8 +295,9 @@ public int onReadFile(String fileName, ByteBuffer buf, long offset, DokanFileInf
 
 				if (!wr.done) {
 					z++;
-					log.debug("write did not finish in " + (z * CHANNEL_TIMEOUT) / 1000 + "seconds. slow io."
-							+ arg3.handle);
+					SDFSLogger.getFSLog()
+							.debug("write did not finish in " + (z * CHANNEL_TIMEOUT) / 1000 + "seconds. slow io."
+									+ arg3.handle);
 					Dokan.resetTimeout(RESET_DURATION, arg3);
 				}
 			}
@@ -308,11 +308,11 @@ public int onReadFile(String fileName, ByteBuffer buf, long offset, DokanFileInf
 			// if (read == -1)
 			// read = 0;
 			return wr.read;
-		} catch(NullPointerException e) {
-			log.debug("unable to read file " + fileName, e);
+		} catch (NullPointerException e) {
+			SDFSLogger.getFSLog().debug("unable to read file " + fileName, e);
 			throw new DokanOperationException(ERROR_READ_FAULT);
-		}catch (Exception e) {
-			log.error("unable to read file " + fileName, e);
+		} catch (Exception e) {
+			SDFSLogger.getFSLog().error("unable to read file " + fileName, e);
 			throw new DokanOperationException(ERROR_READ_FAULT);
 		}
 	}
@@ -323,8 +323,7 @@ public int onWriteFile(String fileName, ByteBuffer buf, long offset, DokanFileIn
 		try {
 			if (Main.volume.isFull())
 				throw new DokanOperationException(ERROR_DISK_FULL);
-			if (SDFSLogger.isFSDebug())
-				log.debug("[onWriteFile] " + fileName + " sz=" + buf.capacity() + " offset=" + offset);
+			SDFSLogger.getFSLog().debug("[onWriteFile] " + fileName + " sz=" + buf.capacity() + " offset=" + offset);
 
 			/*
 			 * WriteThread th = new WriteThread(); th.buf = buf; th.offset =
@@ -340,7 +339,7 @@ public int onWriteFile(String fileName, ByteBuffer buf, long offset, DokanFileIn
 
 				executor.execute(wr);
 			} catch (RejectedExecutionException e) {
-				log.warn("Threads exhausted");
+				SDFSLogger.getFSLog().warn("Threads exhausted");
 				Thread th = new Thread(wr);
 				th.start();
 			}
@@ -350,8 +349,9 @@ public int onWriteFile(String fileName, ByteBuffer buf, long offset, DokanFileIn
 				}
 				if (!wr.done) {
 					z++;
-					log.debug("write did not finish in " + (z * CHANNEL_TIMEOUT) / 1000 + " seconds. slow io. ct="
-							+ arg3.handle);
+					SDFSLogger.getFSLog()
+							.debug("write did not finish in " + (z * CHANNEL_TIMEOUT) / 1000 + " seconds. slow io. ct="
+									+ arg3.handle);
 					Dokan.resetTimeout(RESET_DURATION, arg3);
 				}
 			}
@@ -362,10 +362,10 @@ public int onWriteFile(String fileName, ByteBuffer buf, long offset, DokanFileIn
 			return buf.position();
 			// log("wrote " + new String(b));
 		} catch (DokanOperationException e) {
-			log.error("Unable to write " + fileName + " at " + offset, e);
+			SDFSLogger.getFSLog().error("Unable to write " + fileName + " at " + offset, e);
 			throw e;
 		} catch (Exception e) {
-			log.error("Unable to write " + fileName + " at " + offset, e);
+			SDFSLogger.getFSLog().error("Unable to write " + fileName + " at " + offset, e);
 			throw new DokanOperationException(ERROR_WRITE_FAULT);
 		}
 
@@ -375,11 +375,10 @@ public int onWriteFile(String fileName, ByteBuffer buf, long offset, DokanFileIn
 	public void onSetEndOfFile(String fileName, long length, DokanFileInfo arg2) throws DokanOperationException {
 
 		try {
-			if (SDFSLogger.isFSDebug())
-				log.debug("[onSetEndOfFile] " + fileName);
+			SDFSLogger.getFSLog().debug("[onSetEndOfFile] " + fileName);
 			truncateFile(fileName, length, arg2);
 		} catch (Exception e) {
-			log.error("Unable to set length  of " + fileName + " to " + length);
+			SDFSLogger.getFSLog().error("Unable to set length  of " + fileName + " to " + length);
 			throw new DokanOperationException(ERROR_WRITE_FAULT);
 		}
 	}
@@ -388,8 +387,7 @@ public void onSetEndOfFile(String fileName, long length, DokanFileInfo arg2) thr
 	public void onFlushFileBuffers(String fileName, DokanFileInfo arg1) throws DokanOperationException {
 
 		try {
-			if (SDFSLogger.isFSDebug())
-				log.debug("[onFlushFileBuffers] " + fileName);
+			SDFSLogger.getFSLog().debug("[onFlushFileBuffers] " + fileName);
 			SyncThread sn = new SyncThread();
 			sn.fileName = fileName;
 			sn.info = arg1;
@@ -398,7 +396,7 @@ public void onFlushFileBuffers(String fileName, DokanFileInfo arg1) throws Dokan
 
 				executor.execute(sn);
 			} catch (RejectedExecutionException e) {
-				log.warn("Threads exhausted");
+				SDFSLogger.getFSLog().warn("Threads exhausted");
 				Thread th = new Thread(sn);
 				th.start();
 			}
@@ -408,8 +406,9 @@ public void onFlushFileBuffers(String fileName, DokanFileInfo arg1) throws Dokan
 				}
 				if (!sn.done) {
 					z++;
-					log.debug("fsync did not finish in " + (z * CHANNEL_TIMEOUT) / 1000 + " seconds. slow io."
-							+ arg1.handle);
+					SDFSLogger.getFSLog()
+							.debug("fsync did not finish in " + (z * CHANNEL_TIMEOUT) / 1000 + " seconds. slow io."
+									+ arg1.handle);
 					Dokan.resetTimeout(RESET_DURATION, arg1);
 				}
 			}
@@ -418,7 +417,7 @@ public void onFlushFileBuffers(String fileName, DokanFileInfo arg1) throws Dokan
 
 		} catch (Exception e) {
 
-			log.error("unable to sync file " + fileName, e);
+			SDFSLogger.getFSLog().error("unable to sync file " + fileName, e);
 			throw new DokanOperationException(ERROR_WRITE_FAULT);
 		}
 
@@ -427,8 +426,7 @@ public void onFlushFileBuffers(String fileName, DokanFileInfo arg1) throws Dokan
 	@Override
 	public ByHandleFileInformation onGetFileInformation(String fileName, DokanFileInfo arg1)
 			throws DokanOperationException {
-		if (SDFSLogger.isFSDebug())
-			log.debug("[onGetFileInformation] " + fileName);
+		SDFSLogger.getFSLog().debug("[onGetFileInformation] " + fileName);
 		try {
 			GetFileInfoThread sn = new GetFileInfoThread();
 			sn.fileName = fileName;
@@ -437,7 +435,7 @@ public ByHandleFileInformation onGetFileInformation(String fileName, DokanFileIn
 
 				executor.execute(sn);
 			} catch (RejectedExecutionException e) {
-				log.warn("Threads exhausted");
+				SDFSLogger.getFSLog().warn("Threads exhausted");
 				Thread th = new Thread(sn);
 				th.start();
 			}
@@ -447,8 +445,9 @@ public ByHandleFileInformation onGetFileInformation(String fileName, DokanFileIn
 				}
 				if (!sn.done) {
 					z++;
-					log.debug("ByHandleFileInformation did not finish in " + (z * CHANNEL_TIMEOUT) / 1000
-							+ " seconds. slow io." + arg1.handle);
+					SDFSLogger.getFSLog()
+							.debug("ByHandleFileInformation did not finish in " + (z * CHANNEL_TIMEOUT) / 1000
+									+ " seconds. slow io." + arg1.handle);
 					Dokan.resetTimeout(RESET_DURATION, arg1);
 				}
 			}
@@ -458,7 +457,7 @@ public ByHandleFileInformation onGetFileInformation(String fileName, DokanFileIn
 				return sn.info;
 
 		} catch (Exception e) {
-			log.error("unable to get file info " + fileName, e);
+			SDFSLogger.getFSLog().error("unable to get file info " + fileName, e);
 			throw new DokanOperationException(ERROR_GEN_FAILURE);
 		}
 	}
@@ -466,15 +465,14 @@ public ByHandleFileInformation onGetFileInformation(String fileName, DokanFileIn
 	@Override
 	public Win32FindData[] onFindFiles(String pathName, DokanFileInfo arg1) throws DokanOperationException {
 		try {
-			if (SDFSLogger.isFSDebug())
-				log.debug("[onFindFiles] " + pathName);
+			SDFSLogger.getFSLog().debug("[onFindFiles] " + pathName);
 			ListFiles sn = new ListFiles();
 			sn.pathName = pathName;
 			try {
 
 				executor.execute(sn);
 			} catch (RejectedExecutionException e) {
-				log.warn("Threads exhausted");
+				SDFSLogger.getFSLog().warn("Threads exhausted");
 				Thread th = new Thread(sn);
 				th.start();
 			}
@@ -483,7 +481,7 @@ public Win32FindData[] onFindFiles(String pathName, DokanFileInfo arg1) throws D
 					sn.wait(CHANNEL_TIMEOUT);
 				}
 				if (!sn.done) {
-					log.debug("find files did not finish in 5 seconds. slow io." + arg1.handle);
+					SDFSLogger.getFSLog().debug("find files did not finish in 5 seconds. slow io." + arg1.handle);
 					Dokan.resetTimeout(RESET_DURATION, arg1);
 				}
 			}
@@ -494,7 +492,7 @@ public Win32FindData[] onFindFiles(String pathName, DokanFileInfo arg1) throws D
 
 		} catch (Exception e) {
 
-			log.error("unable to list file " + pathName, e);
+			SDFSLogger.getFSLog().error("unable to list file " + pathName, e);
 			throw new DokanOperationException(WinError.ERROR_OPEN_FAILED);
 		}
 	}
@@ -502,16 +500,14 @@ public Win32FindData[] onFindFiles(String pathName, DokanFileInfo arg1) throws D
 	@Override
 	public Win32FindData[] onFindFilesWithPattern(String pathName, String arg1, DokanFileInfo arg2)
 			throws DokanOperationException {
-		if (SDFSLogger.isFSDebug())
-			log.debug("[onFindFilesWithPattern] " + pathName);
+		SDFSLogger.getFSLog().debug("[onFindFilesWithPattern] " + pathName);
 		return null;
 	}
 
 	@Override
 	public void onSetFileAttributes(String fileName, int fileAttributes, DokanFileInfo arg2)
 			throws DokanOperationException {
-		if (SDFSLogger.isFSDebug())
-			log.debug("[onSetFileAttributes] " + fileName);
+		SDFSLogger.getFSLog().debug("[onSetFileAttributes] " + fileName);
 		/*
 		 * MemFileInfo fi = fileInfoMap.get(fileName); if (fi == null) throw new
 		 * DokanOperationException(ERROR_FILE_NOT_FOUND); fi.fileAttribute =
@@ -522,8 +518,7 @@ public void onSetFileAttributes(String fileName, int fileAttributes, DokanFileIn
 	@Override
 	public void onSetFileTime(String fileName, long creationTime, long atime, long mtime, DokanFileInfo arg4)
 			throws DokanOperationException {
-		if (SDFSLogger.isFSDebug())
-			log.debug("[onSetFileTime] " + fileName);
+		SDFSLogger.getFSLog().debug("[onSetFileTime] " + fileName);
 
 		try {
 			SetTimeThread sn = new SetTimeThread();
@@ -534,7 +529,7 @@ public void onSetFileTime(String fileName, long creationTime, long atime, long m
 
 				executor.execute(sn);
 			} catch (RejectedExecutionException e) {
-				log.warn("Threads exhausted");
+				SDFSLogger.getFSLog().warn("Threads exhausted");
 				Thread th = new Thread(sn);
 				th.start();
 			}
@@ -543,7 +538,7 @@ public void onSetFileTime(String fileName, long creationTime, long atime, long m
 					sn.wait(CHANNEL_TIMEOUT);
 				}
 				if (!sn.done) {
-					log.debug("onSetFileTime did not finish in 5 seconds. slow io." + arg4.handle);
+					SDFSLogger.getFSLog().debug("onSetFileTime did not finish in 5 seconds. slow io." + arg4.handle);
 					Dokan.resetTimeout(RESET_DURATION, arg4);
 				}
 			}
@@ -551,10 +546,10 @@ public void onSetFileTime(String fileName, long creationTime, long atime, long m
 				throw sn.errRtn;
 
 		} catch (DokanOperationException e) {
-			log.error("unable to set file " + fileName, e);
+			SDFSLogger.getFSLog().error("unable to set file " + fileName, e);
 			throw e;
 		} catch (Exception e) {
-			log.error("unable to set file " + fileName, e);
+			SDFSLogger.getFSLog().error("unable to set file " + fileName, e);
 			throw new DokanOperationException(ERROR_WRITE_FAULT);
 		}
 	}
@@ -569,7 +564,7 @@ private void truncateFile(String fileName, long sz, DokanFileInfo nfo) throws Ex
 
 				executor.execute(wr);
 			} catch (RejectedExecutionException e) {
-				log.warn("Threads exhausted");
+				SDFSLogger.getFSLog().warn("Threads exhausted");
 				Thread th = new Thread(wr);
 				th.start();
 			}
@@ -578,24 +573,23 @@ private void truncateFile(String fileName, long sz, DokanFileInfo nfo) throws Ex
 					wr.wait(CHANNEL_TIMEOUT);
 				}
 				if (!wr.done) {
-					log.debug("truncate did not finish in 5 seconds. slow io." + nfo.handle);
+					SDFSLogger.getFSLog().debug("truncate did not finish in 5 seconds. slow io." + nfo.handle);
 				}
 			}
 			if (wr.errRtn != null)
 				throw wr.errRtn;
 		} catch (DokanOperationException e) {
-			log.error("unable to truncate file " + fileName, e);
+			SDFSLogger.getFSLog().error("unable to truncate file " + fileName, e);
 			throw e;
 		} catch (Exception e) {
-			log.error("unable to truncate file " + fileName, e);
+			SDFSLogger.getFSLog().error("unable to truncate file " + fileName, e);
 			throw new DokanOperationException(ERROR_WRITE_FAULT);
 		}
 	}
 
 	@Override
 	public void onDeleteFile(String fileName, DokanFileInfo arg1) throws DokanOperationException {
-		if (SDFSLogger.isFSDebug())
-			log.debug("[onDeleteFile] " + fileName);
+		SDFSLogger.getFSLog().debug("[onDeleteFile] " + fileName);
 		try {
 
 			DeleteFileThread sn = new DeleteFileThread();
@@ -606,7 +600,7 @@ public void onDeleteFile(String fileName, DokanFileInfo arg1) throws DokanOperat
 
 				executor.execute(sn);
 			} catch (RejectedExecutionException e) {
-				log.warn("Threads exhausted");
+				SDFSLogger.getFSLog().warn("Threads exhausted");
 				Thread th = new Thread(sn);
 				th.start();
 			}
@@ -615,25 +609,24 @@ public void onDeleteFile(String fileName, DokanFileInfo arg1) throws DokanOperat
 					sn.wait(CHANNEL_TIMEOUT);
 				}
 				if (!sn.done) {
-					log.debug("onDeleteFile did not finish in 5 seconds. slow io." + arg1.handle);
+					SDFSLogger.getFSLog().debug("onDeleteFile did not finish in 5 seconds. slow io." + arg1.handle);
 					Dokan.resetTimeout(RESET_DURATION, arg1);
 				}
 			}
 			if (sn.errRtn != null)
 				throw sn.errRtn;
 		} catch (DokanOperationException e) {
-			log.error("unable to delete file " + fileName, e);
+			SDFSLogger.getFSLog().error("unable to delete file " + fileName, e);
 			throw e;
 		} catch (Exception e) {
-			log.error("unable to delete file " + fileName, e);
+			SDFSLogger.getFSLog().error("unable to delete file " + fileName, e);
 			throw new DokanOperationException(WinError.ERROR_ACCESS_DENIED);
 		}
 	}
 
 	@Override
 	public void onDeleteDirectory(String path, DokanFileInfo arg1) throws DokanOperationException {
-		if (SDFSLogger.isFSDebug())
-			log.debug("[onDeleteDirectory] " + path);
+		SDFSLogger.getFSLog().debug("[onDeleteDirectory] " + path);
 		try {
 
 			DeleteFolderThread sn = new DeleteFolderThread();
@@ -642,7 +635,7 @@ public void onDeleteDirectory(String path, DokanFileInfo arg1) throws DokanOpera
 
 				executor.execute(sn);
 			} catch (RejectedExecutionException e) {
-				log.warn("Threads exhausted");
+				SDFSLogger.getFSLog().warn("Threads exhausted");
 				Thread th = new Thread(sn);
 				th.start();
 			}
@@ -651,17 +644,18 @@ public void onDeleteDirectory(String path, DokanFileInfo arg1) throws DokanOpera
 					sn.wait(CHANNEL_TIMEOUT);
 				}
 				if (!sn.done) {
-					log.debug("onDeleteDirectory did not finish in 5 seconds. slow io." + arg1.handle);
+					SDFSLogger.getFSLog()
+							.debug("onDeleteDirectory did not finish in 5 seconds. slow io." + arg1.handle);
 					Dokan.resetTimeout(RESET_DURATION, arg1);
 				}
 			}
 			if (sn.errRtn != null)
 				throw sn.errRtn;
 		} catch (DokanOperationException e) {
-			log.error("unable to delete directory " + path, e);
+			SDFSLogger.getFSLog().error("unable to delete directory " + path, e);
 			throw e;
 		} catch (Exception e) {
-			log.error("unable to delete file " + path, e);
+			SDFSLogger.getFSLog().error("unable to delete file " + path, e);
 			throw new DokanOperationException(WinError.ERROR_ACCESS_DENIED);
 		}
 	}
@@ -669,10 +663,10 @@ public void onDeleteDirectory(String path, DokanFileInfo arg1) throws DokanOpera
 	@Override
 	public void onMoveFile(String from, String to, boolean replaceExisiting, DokanFileInfo arg3)
 			throws DokanOperationException {
-		if (SDFSLogger.isFSDebug())
-			log.debug("==> [onMoveFile] " + from + " -> " + to + ", replaceExisiting = " + replaceExisiting);
+		SDFSLogger.getFSLog()
+				.debug("==> [onMoveFile] " + from + " -> " + to + ", replaceExisiting = " + replaceExisiting);
 		if (arg3 != null) {
-			log.debug("dokanfileinfo " + arg3.handle);
+			SDFSLogger.getFSLog().debug("dokanfileinfo " + arg3.handle);
 		}
 		try {
 			MoveFileThread sn = new MoveFileThread();
@@ -682,7 +676,7 @@ public void onMoveFile(String from, String to, boolean replaceExisiting, DokanFi
 
 				executor.execute(sn);
 			} catch (RejectedExecutionException e) {
-				log.warn("Threads exhausted");
+				SDFSLogger.getFSLog().warn("Threads exhausted");
 				Thread th = new Thread(sn);
 				th.start();
 			}
@@ -691,14 +685,14 @@ public void onMoveFile(String from, String to, boolean replaceExisiting, DokanFi
 					sn.wait(CHANNEL_TIMEOUT);
 				}
 				if (!sn.done) {
-					log.debug("sync did not finish in 5 seconds. slow io." + arg3.handle);
+					SDFSLogger.getFSLog().debug("sync did not finish in 5 seconds. slow io." + arg3.handle);
 					Dokan.resetTimeout(RESET_DURATION, arg3);
 				}
 			}
 			if (sn.errRtn != null)
 				throw sn.errRtn;
 		} catch (Exception e) {
-			log.error("unable to move file " + from + " to " + to, e);
+			SDFSLogger.getFSLog().error("unable to move file " + from + " to " + to, e);
 			throw new DokanOperationException(ERROR_FILE_EXISTS);
 		}
 		// log("<== [onMoveFile]");
@@ -706,27 +700,27 @@ public void onMoveFile(String from, String to, boolean replaceExisiting, DokanFi
 
 	@Override
 	public void onLockFile(String fileName, long arg1, long arg2, DokanFileInfo arg3) throws DokanOperationException {
-		if (SDFSLogger.isFSDebug())
-			log.debug("[onLockFile] " + fileName);
+
+		SDFSLogger.getFSLog().debug("[onLockFile] " + fileName);
 	}
 
 	@Override
 	public void onUnlockFile(String fileName, long arg1, long arg2, DokanFileInfo arg3) throws DokanOperationException {
-		if (SDFSLogger.isFSDebug())
-			log.debug("[onUnlockFile] " + fileName);
+
+		SDFSLogger.getFSLog().debug("[onUnlockFile] " + fileName);
 	}
 
 	@Override
 	public DokanDiskFreeSpace onGetDiskFreeSpace(DokanFileInfo arg0) throws DokanOperationException {
-		if (SDFSLogger.isFSDebug())
-			log.debug("[onGetDiskFreeSpace]");
+
+		SDFSLogger.getFSLog().debug("[onGetDiskFreeSpace]");
 		try {
 			DokanDiskFreeSpaceThread sn = new DokanDiskFreeSpaceThread();
 			try {
 
 				executor.execute(sn);
 			} catch (RejectedExecutionException e) {
-				log.warn("Threads exhausted");
+				SDFSLogger.getFSLog().warn("Threads exhausted");
 				Thread th = new Thread(sn);
 				th.start();
 			}
@@ -735,7 +729,8 @@ public DokanDiskFreeSpace onGetDiskFreeSpace(DokanFileInfo arg0) throws DokanOpe
 					sn.wait(CHANNEL_TIMEOUT);
 				}
 				if (!sn.done) {
-					log.debug("onGetDiskFreeSpace did not finish in 5 seconds. slow io." + arg0.handle);
+					SDFSLogger.getFSLog()
+							.debug("onGetDiskFreeSpace did not finish in 5 seconds. slow io." + arg0.handle);
 					Dokan.resetTimeout(RESET_DURATION, arg0);
 				}
 			}
@@ -744,7 +739,7 @@ public DokanDiskFreeSpace onGetDiskFreeSpace(DokanFileInfo arg0) throws DokanOpe
 			else
 				return sn.info;
 		} catch (Exception e) {
-			log.error("error getting free disk space", e);
+			SDFSLogger.getFSLog().error("error getting free disk space", e);
 			throw new DokanOperationException(ERROR_GEN_FAILURE);
 		}
 	}
@@ -752,8 +747,8 @@ public DokanDiskFreeSpace onGetDiskFreeSpace(DokanFileInfo arg0) throws DokanOpe
 	@Override
 	public DokanVolumeInformation onGetVolumeInformation(String arg0, DokanFileInfo arg1)
 			throws DokanOperationException {
-		if (SDFSLogger.isFSDebug())
-			log.debug("[onGetVolumeInformation]");
+
+		SDFSLogger.getFSLog().debug("[onGetVolumeInformation]");
 		try {
 			DokanVolumeInformation info = new DokanVolumeInformation();
 			info.fileSystemFlags = SUPPORTED_FLAGS;
@@ -763,14 +758,14 @@ public DokanVolumeInformation onGetVolumeInformation(String arg0, DokanFileInfo
 			info.volumeSerialNumber = (int) (Main.volume.getSerialNumber() >> 32);
 			return info;
 		} catch (Exception e) {
-			log.error("error getting volume info", e);
+			SDFSLogger.getFSLog().error("error getting volume info", e);
 			throw new DokanOperationException(ERROR_GEN_FAILURE);
 		}
 	}
 
 	@Override
 	public void onUnmount(DokanFileInfo arg0) throws DokanOperationException {
-		log.debug("[onUnmount]");
+		SDFSLogger.getFSLog().debug("[onUnmount]");
 		try {
 			Dokan.removeMountPoint(driveLetter);
 		} catch (Exception e) {
@@ -788,26 +783,26 @@ public void onUnmount(DokanFileInfo arg0) throws DokanOperationException {
 
 	protected static DedupFileChannel getFileChannel(String path, long handleNo) throws DokanOperationException {
 		Long k = Long.valueOf(handleNo);
-		
+
 		DedupFileChannel ch = dedupChannels.get(k);
 		if (ch == null) {
 			File f = resolvePath(path);
-			if(f.isFile()) {
-			try {
-				MetaDataDedupFile mf = MetaFileStore.getMF(f.getPath());
-				ch = mf.getDedupFile(false).getChannel(-1);
-				if (dedupChannels.containsKey(k)) {
-					ch.getDedupFile().unRegisterChannel(ch, -1);
-					ch = dedupChannels.get(k);
-				} else {
-					dedupChannels.put(k, ch);
-					SDFSLogger.getLog().debug("added channel " + k + " for " +path + " hno " + handleNo);
+			if (f.isFile()) {
+				try {
+					MetaDataDedupFile mf = MetaFileStore.getMF(f.getPath());
+					ch = mf.getDedupFile(false).getChannel(-1);
+					if (dedupChannels.containsKey(k)) {
+						ch.getDedupFile().unRegisterChannel(ch, -1);
+						ch = dedupChannels.get(k);
+					} else {
+						dedupChannels.put(k, ch);
+						SDFSLogger.getLog().debug("added channel " + k + " for " + path + " hno " + handleNo);
+					}
+				} catch (Exception e) {
+					SDFSLogger.getFSLog().error("unable to open file" + f.getPath(), e);
+					throw new DokanOperationException(WinError.ERROR_GEN_FAILURE);
 				}
-			} catch (Exception e) {
-				log.error("unable to open file" + f.getPath(), e);
-				throw new DokanOperationException(WinError.ERROR_GEN_FAILURE);
-			}
-			}else {
+			} else {
 				return null;
 			}
 		}
@@ -829,7 +824,8 @@ protected void closeFileChannel(long handleNo, DokanFileInfo info) {
 					}
 					if (!cl.done && info != null) {
 						z++;
-						log.debug("waiting for close for " + (z * CHANNEL_TIMEOUT) / 1000 + " " + handleNo);
+						SDFSLogger.getFSLog()
+								.debug("waiting for close for " + (z * CHANNEL_TIMEOUT) / 1000 + " " + handleNo);
 						Dokan.resetTimeout(RESET_DURATION, info);
 					} else {
 						return;
@@ -840,13 +836,13 @@ protected void closeFileChannel(long handleNo, DokanFileInfo info) {
 			} catch (RejectedExecutionException e) {
 				Thread th = new Thread(cl);
 				th.start();
-				log.warn("Threads exhausted in close");
+				SDFSLogger.getFSLog().warn("Threads exhausted in close");
 			}
 			// ch.getDedupFile().unRegisterChannel(ch, -1);
 		} catch (Exception e) {
-			log.error("unable to close channel" + handleNo, e);
+			SDFSLogger.getFSLog().error("unable to close channel" + handleNo, e);
 		} finally {
-			log.debug("number of channels is " + dedupChannels.size());
+			SDFSLogger.getFSLog().debug("number of channels is " + dedupChannels.size());
 		}
 	}
 
@@ -855,16 +851,17 @@ protected void closeFileChannel(long handleNo, DokanFileInfo info) {
 	 * DokanOperationException { File f = this.resolvePath(path); try {
 	 * MetaDataDedupFile mf = MetaFileStore.getMF(f.getPath()); return
 	 * mf.getDedupFile(); } catch (IOException e) {
-	 * log.error("unable to open file" + f.getPath(), e); throw new
+	 * SDFSLogger.getFSLog().error("unable to open file" + f.getPath(), e); throw
+	 * new
 	 * DokanOperationException(WinError.ERROR_GEN_FAILURE); } }
 	 */
 
 	private static File resolvePath(String path) throws DokanOperationException {
 		File _f = new File(mountedVolume + path);
-		
+
 		if (!_f.exists()) {
 			_f = null;
-			log.debug("No such node " + path);
+			SDFSLogger.getFSLog().debug("No such node " + path);
 			throw new DokanOperationException(WinError.ERROR_FILE_NOT_FOUND);
 		}
 		return _f;
@@ -883,7 +880,7 @@ public void run() {
 			try {
 				DedupFileChannel ch = getFileChannel(fileName, info.handle);
 				if (info.writeToEndOfFile) {
-					log.debug("writing to end of file" + ch.getFile().length());
+					SDFSLogger.getFSLog().debug("writing to end of file" + ch.getFile().length());
 					pos = ch.getFile().length();
 				}
 				ch.writeFile(buf, buf.capacity(), 0, pos, true);
@@ -893,7 +890,7 @@ public void run() {
 				 * [] r = new byte [buf.capacity()]; buf.position(0);
 				 * buf.get(z); ch.read(ByteBuffer.wrap(r), 0, r.length, pos);
 				 * int i = hf.hashBytes(z).asInt(); int o =
-				 * hf.hashBytes(r).asInt(); if(i != o) { log.warn("i=" +i +
+				 * hf.hashBytes(r).asInt(); if(i != o) { SDFSLogger.getFSLog().warn("i=" +i +
 				 * " o=" +o + " pos=" + pos); }
 				 */
 
@@ -973,11 +970,11 @@ private static class SyncThread implements Runnable {
 
 		@Override
 		public void run() {
-			
+
 			try {
-					DedupFileChannel ch = getFileChannel(fileName, info.handle);
-					if(ch != null)
-						ch.force(true);
+				DedupFileChannel ch = getFileChannel(fileName, info.handle);
+				if (ch != null)
+					ch.force(true);
 			} catch (Exception e) {
 				SDFSLogger.getLog().debug("error while sync data", e);
 				errRtn = e;
@@ -1004,12 +1001,12 @@ public void run() {
 				if (ch != null) {
 					ch.getDedupFile().unRegisterChannel(ch, -1);
 					if (ch.getFile() != null && ch.getFile().deleteOnClose) {
-						MetaFileStore.removeMetaFile(ch.getFile().getPath(), true, true,true);
-						log.debug("Deleted file on close");
+						MetaFileStore.removeMetaFile(ch.getFile().getPath(), true, true, true);
+						SDFSLogger.getFSLog().debug("Deleted file on close");
 					}
 				}
-				
-				//SDFSLogger.getLog().info("open channel size is " + dedupChannels.size());
+
+				// SDFSLogger.getLog().info("open channel size is " + dedupChannels.size());
 			} catch (Exception e) {
 				SDFSLogger.getLog().debug("error while reading data", e);
 				errRtn = e;
@@ -1032,27 +1029,27 @@ private static class ListFiles implements Runnable {
 		public void run() {
 			try {
 				File f = WinSDFS.resolvePath(pathName);
-				//SDFSLogger.getLog().info("Listing " + f.getPath() +  " sz=" +f.listFiles().length);
-				
-				
+				// SDFSLogger.getLog().info("Listing " + f.getPath() + " sz="
+				// +f.listFiles().length);
+
 				if (!f.exists())
 					throw new DokanOperationException(ERROR_FILE_NOT_FOUND);
 				ArrayList al = new ArrayList();
-				Path dir = FileSystems.getDefault().getPath( f.getPath() );
-			    DirectoryStream stream = Files.newDirectoryStream( dir );
-			      for (Path p : stream) {
-			    	  File _mf = p.toFile();
-			    	  try {
-			    		  MetaDataDedupFile mf = MetaFileStore.getNCMF(new File(_mf.getPath()));
+				Path dir = FileSystems.getDefault().getPath(f.getPath());
+				DirectoryStream stream = Files.newDirectoryStream(dir);
+				for (Path p : stream) {
+					File _mf = p.toFile();
+					try {
+						MetaDataDedupFile mf = MetaFileStore.getNCMF(new File(_mf.getPath()));
 						MetaDataFileInfo fi = new MetaDataFileInfo(_mf.getName(), mf);
-						log.debug(fi.toString());
+						SDFSLogger.getFSLog().debug(fi.toString());
 						al.add(fi.toWin32FindData());
-			    	  }catch(Exception e) {
-			    		  SDFSLogger.getLog().error("error getting file " + _mf.getPath(),e);
-			    	  }
-			      }
-			      stream.close();
-			      filedata = al.toArray(new Win32FindData[al.size()]);
+					} catch (Exception e) {
+						SDFSLogger.getLog().error("error getting file " + _mf.getPath(), e);
+					}
+				}
+				stream.close();
+				filedata = al.toArray(new Win32FindData[al.size()]);
 			} catch (Exception e) {
 				SDFSLogger.getLog().error("error while listing files", e);
 				errRtn = e;
@@ -1114,16 +1111,16 @@ public void run() {
 					try {
 						sdfs.closeFileChannel(arg1.handle, arg1);
 					} catch (Exception e) {
-						log.error("unable to close " + fileName, e);
+						SDFSLogger.getFSLog().error("unable to close " + fileName, e);
 					}
 				}
 				File f = resolvePath(fileName);
 
-				if (!MetaFileStore.removeMetaFile(f.getPath(), true, false,true)) {
-					log.warn("unable to delete file " + f.getPath());
+				if (!MetaFileStore.removeMetaFile(f.getPath(), true, false, true)) {
+					SDFSLogger.getFSLog().warn("unable to delete file " + f.getPath());
 					throw new DokanOperationException(ERROR_FILE_NOT_FOUND);
 				}
-				log.debug("deleteted file " + fileName);
+				SDFSLogger.getFSLog().debug("deleteted file " + fileName);
 			} catch (Exception e) {
 				SDFSLogger.getLog().debug("error while deleting file", e);
 				errRtn = e;
@@ -1148,11 +1145,11 @@ public void run() {
 			try {
 				File f = resolvePath(path);
 
-				if (!MetaFileStore.removeMetaFile(f.getPath(), true, false,true)) {
-					log.error("unable to delete folder " + f.getPath());
+				if (!MetaFileStore.removeMetaFile(f.getPath(), true, false, true)) {
+					SDFSLogger.getFSLog().error("unable to delete folder " + f.getPath());
 					throw new DokanOperationException(WinError.ERROR_DIR_NOT_EMPTY);
 				}
-				log.debug("deleteted folder " + path);
+				SDFSLogger.getFSLog().debug("deleteted folder " + path);
 			} catch (Exception e) {
 				SDFSLogger.getLog().debug("error while deleting folder", e);
 				errRtn = e;
@@ -1178,7 +1175,7 @@ public void run() {
 			try {
 				File f = resolvePath(from);
 				MetaFileStore.rename(f.getPath(), mountedVolume + to);
-				log.debug("moved " + from + " to " + to);
+				SDFSLogger.getFSLog().debug("moved " + from + " to " + to);
 			} catch (Exception e) {
 				SDFSLogger.getLog().debug("error while setting moving file", e);
 				errRtn = e;
@@ -1205,7 +1202,7 @@ public void run() {
 				MetaDataDedupFile mf = MetaFileStore.getMF(resolvePath(fileName).getPath());
 				MetaDataFileInfo fi = new MetaDataFileInfo(fileName, mf);
 				info = fi.toByHandleFileInformation();
-				log.debug(fi.toString());
+				SDFSLogger.getFSLog().debug(fi.toString());
 			} catch (Exception e) {
 				SDFSLogger.getLog().debug("error while setting fileing file", e);
 				errRtn = e;
@@ -1234,7 +1231,7 @@ public void run() {
 				free.totalNumberOfFreeBytes = Main.volume.getCapacity() - Main.volume.getCurrentSize();
 				this.info = free;
 			} catch (Exception e) {
-				log.error("error getting free disk space", e);
+				SDFSLogger.getFSLog().error("error getting free disk space", e);
 				errRtn = e;
 			} finally {
 				done = true;
@@ -1276,269 +1273,259 @@ public CreateFileThread(String fileName, int desiredAccess, int shareMode, int c
 		@Override
 		public void run() {
 			try {
-				if (SDFSLogger.isFSDebug())
-					log.debug("[onCreateFile] ");
+				SDFSLogger.getFSLog().debug("[onCreateFile] ");
 				CreationDisposition disposition = CreationDisposition.build(creationDisposition);
-				if (SDFSLogger.isFSDebug())
-					log.debug("[onCreateFile] " + fileName + ", creationDisposition = " + disposition + " shareMode="
-							+ shareMode + " desiredAccess=" + desiredAccess + " flagsAndAttributes="
-							+ flagsAndAttributes + " createOptions=" + createOptions + " filePath="
-							+ new File(mountedVolume + fileName).getPath() + " exists="
-							+ new File(mountedVolume + fileName).exists());
+				SDFSLogger.getFSLog()
+						.debug("[onCreateFile] " + fileName + ", creationDisposition = " + disposition
+								+ " shareMode="
+								+ shareMode + " desiredAccess=" + desiredAccess + " flagsAndAttributes="
+								+ flagsAndAttributes + " createOptions=" + createOptions + " filePath="
+								+ new File(mountedVolume + fileName).getPath() + " exists="
+								+ new File(mountedVolume + fileName).exists());
 				EnumSet flags = FileFlag.getFlags(flagsAndAttributes);
 				if ((createOptions & FILE_DIRECTORY_FILE) == FILE_DIRECTORY_FILE
 						|| flags.contains(FileFlags.FILE_DIRECTORY_FILE)) {
-					log.debug("in directory");
+					SDFSLogger.getFSLog().debug("in directory");
 					File _f;
 					switch (disposition) {
-					case FILE_CREATE:
-						if (SDFSLogger.isFSDebug())
-							log.debug("[onCreateFile] directory_create " + fileName);
-						File f = new File(mountedVolume + fileName);
-						if (f.exists()) {
-							f = null;
-							throw new DokanOperationException(WinError.ERROR_ALREADY_EXISTS);
-						}
-						f.mkdir();
-						nextHandle = getNextHandle();
-						break;
-					case FILE_OPEN:
-						if (SDFSLogger.isFSDebug())
-							log.debug("[onCreateFile] directory_open " + fileName + " sm="
-									+ flags.contains(FileFlags.FILE_FLAG_BACKUP_SEMANTICS));
-						if (fileName.equals("\\"))
-							nextHandle = getNextHandle();
-						fileName = Utils.trimTailBackSlash(fileName);
-						_f = new File(mountedVolume + fileName);
-						if (_f.exists() && _f.isDirectory()) {
+						case FILE_CREATE:
+							SDFSLogger.getFSLog().debug("[onCreateFile] directory_create " + fileName);
+							File f = new File(mountedVolume + fileName);
+							if (f.exists()) {
+								f = null;
+								throw new DokanOperationException(WinError.ERROR_ALREADY_EXISTS);
+							}
+							f.mkdir();
 							nextHandle = getNextHandle();
-						} else
-							throw new DokanOperationException(ERROR_PATH_NOT_FOUND);
-						arg5.handle = nextHandle;
-						break;
-					case FILE_OPEN_IF:
-						try {
-							if (SDFSLogger.isFSDebug())
-								log.debug("[onCreateFile] directory_open_if " + fileName);
+							break;
+						case FILE_OPEN:
+							SDFSLogger.getFSLog().debug("[onCreateFile] directory_open " + fileName + " sm="
+									+ flags.contains(FileFlags.FILE_FLAG_BACKUP_SEMANTICS));
 							if (fileName.equals("\\"))
 								nextHandle = getNextHandle();
 							fileName = Utils.trimTailBackSlash(fileName);
 							_f = new File(mountedVolume + fileName);
 							if (_f.exists() && _f.isDirectory()) {
 								nextHandle = getNextHandle();
-							} else if (!_f.exists()) {
-								_f.mkdir();
-								nextHandle = getNextHandle();
 							} else
 								throw new DokanOperationException(ERROR_PATH_NOT_FOUND);
-						} catch (DokanOperationException e) {
-							log.debug("dokan error", e);
-							throw e;
-						} catch (Exception e) {
-							log.error("unable to create directory", e);
-							throw new DokanOperationException(WinError.ERROR_ALREADY_EXISTS);
-						}
-						arg5.handle = nextHandle;
-						break;
-					default:
-						log.error("wring disposition " + disposition);
-						throw new DokanOperationException(WinError.ERROR_BAD_ARGUMENTS);
+							arg5.handle = nextHandle;
+							break;
+						case FILE_OPEN_IF:
+							try {
+								SDFSLogger.getFSLog().debug("[onCreateFile] directory_open_if " + fileName);
+								if (fileName.equals("\\"))
+									nextHandle = getNextHandle();
+								fileName = Utils.trimTailBackSlash(fileName);
+								_f = new File(mountedVolume + fileName);
+								if (_f.exists() && _f.isDirectory()) {
+									nextHandle = getNextHandle();
+								} else if (!_f.exists()) {
+									_f.mkdir();
+									nextHandle = getNextHandle();
+								} else
+									throw new DokanOperationException(ERROR_PATH_NOT_FOUND);
+							} catch (DokanOperationException e) {
+								SDFSLogger.getFSLog().debug("dokan error", e);
+								throw e;
+							} catch (Exception e) {
+								SDFSLogger.getFSLog().error("unable to create directory", e);
+								throw new DokanOperationException(WinError.ERROR_ALREADY_EXISTS);
+							}
+							arg5.handle = nextHandle;
+							break;
+						default:
+							SDFSLogger.getFSLog().error("wring disposition " + disposition);
+							throw new DokanOperationException(WinError.ERROR_BAD_ARGUMENTS);
 
 					}
 				} else {
-					log.debug("in file");
+					SDFSLogger.getFSLog().debug("in file");
 					boolean deleteOnClose = false;
 					if (flags.contains(FileFlags.FILE_DELETE_ON_CLOSE)) {
 						deleteOnClose = true;
 					}
-					if (SDFSLogger.isFSDebug()) {
-						for (FileFlags f : flags) {
-							log.debug("flag = " + f.name());
-						}
-					}
+
 					if (fileName.equals("\\")) {
-						log.debug("\\FILE_CREATE");
+						SDFSLogger.getFSLog().debug("\\FILE_CREATE");
 						switch (disposition) {
-						case FILE_CREATE:
-							throw new DokanOperationException(WinError.ERROR_ALREADY_EXISTS);
-						case FILE_SUPERSEDE:
-							throw new DokanOperationException(WinError.ERROR_ALREADY_EXISTS);
-						case FILE_OPEN:
-							nextHandle = getNextHandle();
-							arg5.handle = nextHandle;
-							break;
-						case FILE_OPEN_IF:
-							nextHandle = getNextHandle();
-							arg5.handle = nextHandle;
-							break;
-						case FILE_OVERWRITE:
-							throw new DokanOperationException(WinError.ERROR_ALREADY_EXISTS);
-						case FILE_OVERWRITE_IF:
-							throw new DokanOperationException(WinError.ERROR_ALREADY_EXISTS);
-						case UNDEFINED:
-							assert (false);
+							case FILE_CREATE:
+								throw new DokanOperationException(WinError.ERROR_ALREADY_EXISTS);
+							case FILE_SUPERSEDE:
+								throw new DokanOperationException(WinError.ERROR_ALREADY_EXISTS);
+							case FILE_OPEN:
+								nextHandle = getNextHandle();
+								arg5.handle = nextHandle;
+								break;
+							case FILE_OPEN_IF:
+								nextHandle = getNextHandle();
+								arg5.handle = nextHandle;
+								break;
+							case FILE_OVERWRITE:
+								throw new DokanOperationException(WinError.ERROR_ALREADY_EXISTS);
+							case FILE_OVERWRITE_IF:
+								throw new DokanOperationException(WinError.ERROR_ALREADY_EXISTS);
+							case UNDEFINED:
+								assert (false);
 
 						}
 					} else if (new File(mountedVolume + fileName).exists()) {
 						switch (disposition) {
-						case FILE_CREATE:
-							log.debug("\\FILE_CREATE");
-							throw new DokanOperationException(WinError.ERROR_ALREADY_EXISTS);
-						case FILE_OPEN_IF:
-							nextHandle = getNextHandle();
-							arg5.handle = nextHandle;
-							if (deleteOnClose) {
-								MetaDataDedupFile mf = MetaFileStore.getMF(mountedVolume + fileName);
-								mf.deleteOnClose = deleteOnClose;
-							}
-							arg5.handle = nextHandle;
-							break;
-						case FILE_OPEN:
-							log.debug("\\FILE_OPEN");
-							nextHandle = getNextHandle();
-							arg5.handle = nextHandle;
-							if (deleteOnClose) {
-								MetaDataDedupFile mf = MetaFileStore.getMF(mountedVolume + fileName);
-								mf.deleteOnClose = deleteOnClose;
-
-							}
-							break;
-						case FILE_SUPERSEDE:
-							try {
-								log.debug("\\FILE_SUPERSEDE");
+							case FILE_CREATE:
+								SDFSLogger.getFSLog().debug("\\FILE_CREATE");
+								throw new DokanOperationException(WinError.ERROR_ALREADY_EXISTS);
+							case FILE_OPEN_IF:
 								nextHandle = getNextHandle();
 								arg5.handle = nextHandle;
-								fs.truncateFile(fileName, 0, arg5);
-								fs.closeFileChannel(nextHandle, arg5);
 								if (deleteOnClose) {
 									MetaDataDedupFile mf = MetaFileStore.getMF(mountedVolume + fileName);
 									mf.deleteOnClose = deleteOnClose;
 								}
-							} catch (IOException e) {
-								log.error("unable to clear file " + resolvePath(fileName).getPath(), e);
-								throw new DokanOperationException(WinError.ERROR_WRITE_FAULT);
-							}
-							break;
-						case FILE_OVERWRITE:
-							log.debug("\\FILE_OVERWRITE");
-							throw new DokanOperationException(WinError.ERROR_ALREADY_EXISTS);
-						case UNDEFINED:
-							log.debug("\\UNDEFINED");
-							assert (false);
-						case FILE_OVERWRITE_IF:
-							try {
-								log.debug("\\FILE_OVERWRITE_IF");
+								arg5.handle = nextHandle;
+								break;
+							case FILE_OPEN:
+								SDFSLogger.getFSLog().debug("\\FILE_OPEN");
 								nextHandle = getNextHandle();
 								arg5.handle = nextHandle;
-								fs.truncateFile(fileName, 0, arg5);
-								fs.closeFileChannel(nextHandle, arg5);
 								if (deleteOnClose) {
 									MetaDataDedupFile mf = MetaFileStore.getMF(mountedVolume + fileName);
 									mf.deleteOnClose = deleteOnClose;
+
 								}
-							} catch (IOException e) {
-								log.error("unable to clear file " + resolvePath(fileName).getPath(), e);
-								throw new DokanOperationException(WinError.ERROR_WRITE_FAULT);
-							}
-							break;
-						default:
-							break;
+								break;
+							case FILE_SUPERSEDE:
+								try {
+									SDFSLogger.getFSLog().debug("\\FILE_SUPERSEDE");
+									nextHandle = getNextHandle();
+									arg5.handle = nextHandle;
+									fs.truncateFile(fileName, 0, arg5);
+									fs.closeFileChannel(nextHandle, arg5);
+									if (deleteOnClose) {
+										MetaDataDedupFile mf = MetaFileStore.getMF(mountedVolume + fileName);
+										mf.deleteOnClose = deleteOnClose;
+									}
+								} catch (IOException e) {
+									SDFSLogger.getFSLog()
+											.error("unable to clear file " + resolvePath(fileName).getPath(), e);
+									throw new DokanOperationException(WinError.ERROR_WRITE_FAULT);
+								}
+								break;
+							case FILE_OVERWRITE:
+								SDFSLogger.getFSLog().debug("\\FILE_OVERWRITE");
+								throw new DokanOperationException(WinError.ERROR_ALREADY_EXISTS);
+							case UNDEFINED:
+								SDFSLogger.getFSLog().debug("\\UNDEFINED");
+								assert (false);
+							case FILE_OVERWRITE_IF:
+								try {
+									SDFSLogger.getFSLog().debug("\\FILE_OVERWRITE_IF");
+									nextHandle = getNextHandle();
+									arg5.handle = nextHandle;
+									fs.truncateFile(fileName, 0, arg5);
+									fs.closeFileChannel(nextHandle, arg5);
+									if (deleteOnClose) {
+										MetaDataDedupFile mf = MetaFileStore.getMF(mountedVolume + fileName);
+										mf.deleteOnClose = deleteOnClose;
+									}
+								} catch (IOException e) {
+									SDFSLogger.getFSLog()
+											.error("unable to clear file " + resolvePath(fileName).getPath(), e);
+									throw new DokanOperationException(WinError.ERROR_WRITE_FAULT);
+								}
+								break;
+							default:
+								break;
 						}
 					} else {
 						String path = mountedVolume + fileName;
 						switch (disposition) {
 
-						case FILE_CREATE:
-							log.debug("FILE_CREATE");
-							if (Main.volume.isFull())
-								throw new DokanOperationException(ERROR_DISK_FULL);
-							try {
+							case FILE_CREATE:
+								SDFSLogger.getFSLog().debug("FILE_CREATE");
+								if (Main.volume.isFull())
+									throw new DokanOperationException(ERROR_DISK_FULL);
+								try {
 
-								if (SDFSLogger.isFSDebug())
-									log.debug("creating " + fileName);
-								MetaDataDedupFile mf = MetaFileStore.getMF(path);
-								mf.sync(true);
-								mf.deleteOnClose = deleteOnClose;
-
-							} catch (Exception e) {
-								log.error("unable to create file " + path, e);
-								throw new DokanOperationException(ERROR_FILE_NOT_FOUND);
-							}
-							nextHandle = getNextHandle();
-							arg5.handle = nextHandle;
-							break;
-						case FILE_OVERWRITE_IF:
-							log.debug("FILE_OVERWRITE_IF");
-							if (Main.volume.isFull())
-								throw new DokanOperationException(ERROR_DISK_FULL);
-							try {
+									SDFSLogger.getFSLog().debug("creating " + fileName);
+									MetaDataDedupFile mf = MetaFileStore.getMF(path);
+									mf.sync(true);
+									mf.deleteOnClose = deleteOnClose;
 
-								if (SDFSLogger.isFSDebug())
-									log.debug("creating " + fileName);
-								MetaDataDedupFile mf = MetaFileStore.getMF(path);
-								mf.sync(true);
-								mf.deleteOnClose = deleteOnClose;
-							} catch (Exception e) {
-								log.error("unable to create file " + path, e);
-								throw new DokanOperationException(ERROR_FILE_NOT_FOUND);
-							}
-							nextHandle = getNextHandle();
-							arg5.handle = nextHandle;
-							break;
-						case FILE_OPEN_IF:
-							log.debug("FILE_OPEN_IF");
-							if (Main.volume.isFull())
-								throw new DokanOperationException(ERROR_DISK_FULL);
-							try {
-								if (SDFSLogger.isFSDebug())
-									log.debug("creating " + fileName);
-								MetaDataDedupFile mf = MetaFileStore.getMF(path);
-								mf.sync(true);
-								mf.deleteOnClose = deleteOnClose;
-							} catch (Exception e) {
-								log.error("unable to create file " + path, e);
+								} catch (Exception e) {
+									SDFSLogger.getFSLog().error("unable to create file " + path, e);
+									throw new DokanOperationException(ERROR_FILE_NOT_FOUND);
+								}
+								nextHandle = getNextHandle();
+								arg5.handle = nextHandle;
+								break;
+							case FILE_OVERWRITE_IF:
+								SDFSLogger.getFSLog().debug("FILE_OVERWRITE_IF");
+								if (Main.volume.isFull())
+									throw new DokanOperationException(ERROR_DISK_FULL);
+								try {
+
+									SDFSLogger.getFSLog().debug("creating " + fileName);
+									MetaDataDedupFile mf = MetaFileStore.getMF(path);
+									mf.sync(true);
+									mf.deleteOnClose = deleteOnClose;
+								} catch (Exception e) {
+									SDFSLogger.getFSLog().error("unable to create file " + path, e);
+									throw new DokanOperationException(ERROR_FILE_NOT_FOUND);
+								}
+								nextHandle = getNextHandle();
+								arg5.handle = nextHandle;
+								break;
+							case FILE_OPEN_IF:
+								SDFSLogger.getFSLog().debug("FILE_OPEN_IF");
+								if (Main.volume.isFull())
+									throw new DokanOperationException(ERROR_DISK_FULL);
+								try {
+									SDFSLogger.getFSLog().debug("creating " + fileName);
+									MetaDataDedupFile mf = MetaFileStore.getMF(path);
+									mf.sync(true);
+									mf.deleteOnClose = deleteOnClose;
+								} catch (Exception e) {
+									SDFSLogger.getFSLog().error("unable to create file " + path, e);
+									throw new DokanOperationException(ERROR_FILE_NOT_FOUND);
+								}
+								nextHandle = getNextHandle();
+								arg5.handle = nextHandle;
+								break;
+							case FILE_OPEN:
+								SDFSLogger.getFSLog().debug("FILE_OPEN");
+								SDFSLogger.getFSLog().debug("unable to open file " + path);
 								throw new DokanOperationException(ERROR_FILE_NOT_FOUND);
-							}
-							nextHandle = getNextHandle();
-							arg5.handle = nextHandle;
-							break;
-						case FILE_OPEN:
-							log.debug("FILE_OPEN");
-							if (SDFSLogger.isFSDebug())
-								log.debug("unable to open file " + path);
-							throw new DokanOperationException(ERROR_FILE_NOT_FOUND);
-						case FILE_OVERWRITE:
-							throw new DokanOperationException(ERROR_FILE_NOT_FOUND);
-						case UNDEFINED:
-							log.debug("UNDEFINED");
-							assert (false);
-						case FILE_SUPERSEDE:
-							log.debug("FILE_SUPERSEDE");
-							if (Main.volume.isFull())
-								throw new DokanOperationException(ERROR_DISK_FULL);
-							try {
-								if (SDFSLogger.isFSDebug())
-									log.debug("creating " + fileName);
-								MetaDataDedupFile mf = MetaFileStore.getMF(path);
-								mf.sync(true);
-								mf.deleteOnClose = deleteOnClose;
-							} catch (Exception e) {
-								log.error("unable to create file " + path, e);
+							case FILE_OVERWRITE:
 								throw new DokanOperationException(ERROR_FILE_NOT_FOUND);
-							}
-							nextHandle = getNextHandle();
-							arg5.handle = nextHandle;
-							break;
-						default:
-							log.debug("hit default");
-							break;
+							case UNDEFINED:
+								SDFSLogger.getFSLog().debug("UNDEFINED");
+								assert (false);
+							case FILE_SUPERSEDE:
+								SDFSLogger.getFSLog().debug("FILE_SUPERSEDE");
+								if (Main.volume.isFull())
+									throw new DokanOperationException(ERROR_DISK_FULL);
+								try {
+									SDFSLogger.getFSLog().debug("creating " + fileName);
+									MetaDataDedupFile mf = MetaFileStore.getMF(path);
+									mf.sync(true);
+									mf.deleteOnClose = deleteOnClose;
+								} catch (Exception e) {
+									SDFSLogger.getFSLog().error("unable to create file " + path, e);
+									throw new DokanOperationException(ERROR_FILE_NOT_FOUND);
+								}
+								nextHandle = getNextHandle();
+								arg5.handle = nextHandle;
+								break;
+							default:
+								SDFSLogger.getFSLog().debug("hit default");
+								break;
 						}
 					}
 					if (nextHandle < 0)
 						throw new DokanOperationException(WinError.ERROR_INVALID_FUNCTION);
 				}
 			} catch (Exception e) {
-				log.debug("error", e);
+				SDFSLogger.getFSLog().debug("error", e);
 				errRtn = e;
 			} finally {
 				done = true;
diff --git a/src/org/opendedup/sdfs/windows/utils/DriveIcon.java b/src/org/opendedup/sdfs/windows/utils/DriveIcon.java
index 4d2c168ae..22c9579cc 100644
--- a/src/org/opendedup/sdfs/windows/utils/DriveIcon.java
+++ b/src/org/opendedup/sdfs/windows/utils/DriveIcon.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com	
+ * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com
  *
  * This file is part of OpenDedupe SDFS.
  *
@@ -18,48 +18,59 @@
  *******************************************************************************/
 package org.opendedup.sdfs.windows.utils;
 
-import java.io.File;
 import java.lang.reflect.InvocationTargetException;
 
 public class DriveIcon {
 
 	public static void addIcon(String drive) throws IllegalArgumentException,
 			IllegalAccessException, InvocationTargetException {
-		drive = drive.toUpperCase();
-		String drivekey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\DriveIcons\\"
-				+ drive;
-		String iconkey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\DriveIcons\\"
-				+ drive + "\\DefaultIcon";
-		String deskey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\DriveIcons\\"
-				+ drive + "\\DefaultLabel";
-		String iconpath = WinRegistry.readString(
-				WinRegistry.HKEY_LOCAL_MACHINE, "SOFTWARE\\Wow6432Node\\SDFS",
-				"path")
-				+ File.separator + "sdfs.ico";
-		WinRegistry.createKey(WinRegistry.HKEY_LOCAL_MACHINE, drivekey);
-		WinRegistry.createKey(WinRegistry.HKEY_LOCAL_MACHINE, iconkey);
-		WinRegistry.createKey(WinRegistry.HKEY_LOCAL_MACHINE, deskey);
-		WinRegistry.writeStringValue(WinRegistry.HKEY_LOCAL_MACHINE, iconkey,
-				"", iconpath);
-		WinRegistry.writeStringValue(WinRegistry.HKEY_LOCAL_MACHINE, deskey,
-				"", "SDFS Deduplicated Volume");
+		/*
+		 * drive = drive.toUpperCase();
+		 * String drivekey =
+		 * "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\DriveIcons\\"
+		 * + drive;
+		 * String iconkey =
+		 * "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\DriveIcons\\"
+		 * + drive + "\\DefaultIcon";
+		 * String deskey =
+		 * "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\DriveIcons\\"
+		 * + drive + "\\DefaultLabel";
+		 *
+		 * String iconpath = WinRegistry.readString(
+		 * WinRegistry.HKEY_LOCAL_MACHINE, "SOFTWARE\\Wow6432Node\\SDFS",
+		 * "path")
+		 * + File.separator + "sdfs.ico";
+		 * WinRegistry.createKey(WinRegistry.HKEY_LOCAL_MACHINE, drivekey);
+		 * WinRegistry.createKey(WinRegistry.HKEY_LOCAL_MACHINE, iconkey);
+		 * WinRegistry.createKey(WinRegistry.HKEY_LOCAL_MACHINE, deskey);
+		 * WinRegistry.writeStringValue(WinRegistry.HKEY_LOCAL_MACHINE, iconkey,
+		 * "", iconpath);
+		 * WinRegistry.writeStringValue(WinRegistry.HKEY_LOCAL_MACHINE, deskey,
+		 * "", "SDFS Deduplicated Volume");
+		 */
 	}
 
 	public static void deleteIcon(String drive)
 			throws IllegalArgumentException, IllegalAccessException,
 			InvocationTargetException {
-		drive = drive.toUpperCase();
-		String drivekey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\DriveIcons\\"
-				+ drive;
-		String iconkey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\DriveIcons\\"
-				+ drive + "\\DefaultIcon";
-		String deskey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\DriveIcons\\"
-				+ drive + "\\DefaultLabel";
-		WinRegistry.deleteValue(WinRegistry.HKEY_LOCAL_MACHINE, iconkey, "");
-		WinRegistry.deleteValue(WinRegistry.HKEY_LOCAL_MACHINE, deskey, "");
-		WinRegistry.deleteKey(WinRegistry.HKEY_LOCAL_MACHINE, iconkey);
-		WinRegistry.deleteKey(WinRegistry.HKEY_LOCAL_MACHINE, deskey);
-		WinRegistry.deleteKey(WinRegistry.HKEY_LOCAL_MACHINE, drivekey);
+
+		/*
+		 * drive = drive.toUpperCase();
+		 * String drivekey =
+		 * "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\DriveIcons\\"
+		 * + drive;
+		 * String iconkey =
+		 * "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\DriveIcons\\"
+		 * + drive + "\\DefaultIcon";
+		 * String deskey =
+		 * "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\DriveIcons\\"
+		 * + drive + "\\DefaultLabel";
+		 * WinRegistry.deleteValue(WinRegistry.HKEY_LOCAL_MACHINE, iconkey, "");
+		 * WinRegistry.deleteValue(WinRegistry.HKEY_LOCAL_MACHINE, deskey, "");
+		 * WinRegistry.deleteKey(WinRegistry.HKEY_LOCAL_MACHINE, iconkey);
+		 * WinRegistry.deleteKey(WinRegistry.HKEY_LOCAL_MACHINE, deskey);
+		 * WinRegistry.deleteKey(WinRegistry.HKEY_LOCAL_MACHINE, drivekey);
+		 */
 	}
 
 }
diff --git a/src/org/opendedup/sdfs/windows/utils/WinRegistry.java b/src/org/opendedup/sdfs/windows/utils/WinRegistry.java
index 2c07e63e3..f3217b166 100644
--- a/src/org/opendedup/sdfs/windows/utils/WinRegistry.java
+++ b/src/org/opendedup/sdfs/windows/utils/WinRegistry.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com	
+ * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com
  *
  * This file is part of OpenDedupe SDFS.
  *
@@ -22,423 +22,98 @@
 import java.io.InputStream;
 import java.io.StringWriter;
 import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.prefs.Preferences;
 
-public class WinRegistry {
-	public static final int HKEY_CURRENT_USER = 0x80000001;
-	public static final int HKEY_LOCAL_MACHINE = 0x80000002;
-	public static final int REG_SUCCESS = 0;
-	public static final int REG_NOTFOUND = 2;
-	public static final int REG_ACCESSDENIED = 5;
-
-	private static final int KEY_ALL_ACCESS = 0xf003f;
-	private static final int KEY_READ = 0x20019;
-	private static Preferences userRoot = Preferences.userRoot();
-	private static Preferences systemRoot = Preferences.systemRoot();
-	private static Class userClass = userRoot.getClass();
-	private static Method regOpenKey = null;
-	private static Method regCloseKey = null;
-	private static Method regQueryValueEx = null;
-	private static Method regEnumValue = null;
-	private static Method regQueryInfoKey = null;
-	private static Method regEnumKeyEx = null;
-	private static Method regCreateKeyEx = null;
-	private static Method regSetValueEx = null;
-	private static Method regDeleteKey = null;
-	private static Method regDeleteValue = null;
-
-	static {
-		try {
-			regOpenKey = userClass.getDeclaredMethod("WindowsRegOpenKey",
-					new Class[] { long.class, byte[].class, int.class });
-			regOpenKey.setAccessible(true);
-			regCloseKey = userClass.getDeclaredMethod("WindowsRegCloseKey",
-					new Class[] { long.class });
-			regCloseKey.setAccessible(true);
-			regQueryValueEx = userClass.getDeclaredMethod(
-					"WindowsRegQueryValueEx", new Class[] { long.class,
-							byte[].class });
-			regQueryValueEx.setAccessible(true);
-			regEnumValue = userClass.getDeclaredMethod("WindowsRegEnumValue",
-					new Class[] { long.class, int.class, int.class });
-			regEnumValue.setAccessible(true);
-			regQueryInfoKey = userClass.getDeclaredMethod(
-					"WindowsRegQueryInfoKey1", new Class[] { long.class });
-			regQueryInfoKey.setAccessible(true);
-			regEnumKeyEx = userClass.getDeclaredMethod("WindowsRegEnumKeyEx",
-					new Class[] { long.class, int.class, int.class });
-			regEnumKeyEx.setAccessible(true);
-			regCreateKeyEx = userClass.getDeclaredMethod(
-					"WindowsRegCreateKeyEx", new Class[] { long.class,
-							byte[].class });
-			regCreateKeyEx.setAccessible(true);
-			regSetValueEx = userClass.getDeclaredMethod("WindowsRegSetValueEx",
-					new Class[] { long.class, byte[].class, byte[].class });
-			regSetValueEx.setAccessible(true);
-			regDeleteValue = userClass.getDeclaredMethod(
-					"WindowsRegDeleteValue", new Class[] { long.class,
-							byte[].class });
-			regDeleteValue.setAccessible(true);
-			regDeleteKey = userClass.getDeclaredMethod("WindowsRegDeleteKey",
-					new Class[] { long.class, byte[].class });
-			regDeleteKey.setAccessible(true);
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-	}
-
-	private WinRegistry() {
-	}
-
-	/**
-	 * Read a value from key and value name
-	 * 
-	 * @param hkey
-	 *            HKEY_CURRENT_USER/HKEY_LOCAL_MACHINE
-	 * @param key
-	 * @param valueName
-	 * @return the value
-	 * @throws IllegalArgumentException
-	 * @throws IllegalAccessException
-	 * @throws InvocationTargetException
-	 */
-	public static String readString(int hkey, String key, String valueName)
-			throws IllegalArgumentException, IllegalAccessException,
-			InvocationTargetException {
-		if (hkey == HKEY_LOCAL_MACHINE) {
-			return readString(systemRoot, hkey, key, valueName);
-		} else if (hkey == HKEY_CURRENT_USER) {
-			return readString(userRoot, hkey, key, valueName);
-		} else {
-			throw new IllegalArgumentException("hkey=" + hkey);
-		}
-	}
-
-	/**
-	 * Read value(s) and value name(s) form given key
-	 * 
-	 * @param hkey
-	 *            HKEY_CURRENT_USER/HKEY_LOCAL_MACHINE
-	 * @param key
-	 * @return the value name(s) plus the value(s)
-	 * @throws IllegalArgumentException
-	 * @throws IllegalAccessException
-	 * @throws InvocationTargetException
-	 */
-	public static Map readStringValues(int hkey, String key)
-			throws IllegalArgumentException, IllegalAccessException,
-			InvocationTargetException {
-		if (hkey == HKEY_LOCAL_MACHINE) {
-			return readStringValues(systemRoot, hkey, key);
-		} else if (hkey == HKEY_CURRENT_USER) {
-			return readStringValues(userRoot, hkey, key);
-		} else {
-			throw new IllegalArgumentException("hkey=" + hkey);
-		}
-	}
-
-	/**
-	 * Read the value name(s) from a given key
-	 * 
-	 * @param hkey
-	 *            HKEY_CURRENT_USER/HKEY_LOCAL_MACHINE
-	 * @param key
-	 * @return the value name(s)
-	 * @throws IllegalArgumentException
-	 * @throws IllegalAccessException
-	 * @throws InvocationTargetException
-	 */
-	public static List readStringSubKeys(int hkey, String key)
-			throws IllegalArgumentException, IllegalAccessException,
-			InvocationTargetException {
-		if (hkey == HKEY_LOCAL_MACHINE) {
-			return readStringSubKeys(systemRoot, hkey, key);
-		} else if (hkey == HKEY_CURRENT_USER) {
-			return readStringSubKeys(userRoot, hkey, key);
-		} else {
-			throw new IllegalArgumentException("hkey=" + hkey);
-		}
-	}
-
-	/**
-	 * Create a key
-	 * 
-	 * @param hkey
-	 *            HKEY_CURRENT_USER/HKEY_LOCAL_MACHINE
-	 * @param key
-	 * @throws IllegalArgumentException
-	 * @throws IllegalAccessException
-	 * @throws InvocationTargetException
-	 */
-	public static void createKey(int hkey, String key)
-			throws IllegalArgumentException, IllegalAccessException,
-			InvocationTargetException {
-		int[] ret;
-		if (hkey == HKEY_LOCAL_MACHINE) {
-			ret = createKey(systemRoot, hkey, key);
-			regCloseKey
-					.invoke(systemRoot, new Object[] { Long.valueOf(ret[0]) });
-		} else if (hkey == HKEY_CURRENT_USER) {
-			ret = createKey(userRoot, hkey, key);
-			regCloseKey.invoke(userRoot, new Object[] { Long.valueOf(ret[0]) });
-		} else {
-			throw new IllegalArgumentException("hkey=" + hkey);
-		}
-		if (ret[1] != REG_SUCCESS) {
-			throw new IllegalArgumentException("rc=" + ret[1] + "  key=" + key);
-		}
-	}
+import org.opendedup.logging.SDFSLogger;
 
-	/**
-	 * Write a value in a given key/value name
-	 * 
-	 * @param hkey
-	 * @param key
-	 * @param valueName
-	 * @param value
-	 * @throws IllegalArgumentException
-	 * @throws IllegalAccessException
-	 * @throws InvocationTargetException
-	 */
-	public static void writeStringValue(int hkey, String key, String valueName,
-			String value) throws IllegalArgumentException,
-			IllegalAccessException, InvocationTargetException {
-		if (hkey == HKEY_LOCAL_MACHINE) {
-			writeStringValue(systemRoot, hkey, key, valueName, value);
-		} else if (hkey == HKEY_CURRENT_USER) {
-			writeStringValue(userRoot, hkey, key, valueName, value);
-		} else {
-			throw new IllegalArgumentException("hkey=" + hkey);
-		}
-	}
-
-	/**
-	 * Delete a given key
-	 * 
-	 * @param hkey
-	 * @param key
-	 * @throws IllegalArgumentException
-	 * @throws IllegalAccessException
-	 * @throws InvocationTargetException
-	 */
-	public static void deleteKey(int hkey, String key)
-			throws IllegalArgumentException, IllegalAccessException,
-			InvocationTargetException {
-		int rc = -1;
-		if (hkey == HKEY_LOCAL_MACHINE) {
-			rc = deleteKey(systemRoot, hkey, key);
-		} else if (hkey == HKEY_CURRENT_USER) {
-			rc = deleteKey(userRoot, hkey, key);
-		}
-		if (rc != REG_SUCCESS) {
-			throw new IllegalArgumentException("rc=" + rc + "  key=" + key);
-		}
-	}
-
-	/**
-	 * delete a value from a given key/value name
-	 * 
-	 * @param hkey
-	 * @param key
-	 * @param value
-	 * @throws IllegalArgumentException
-	 * @throws IllegalAccessException
-	 * @throws InvocationTargetException
-	 */
-	public static void deleteValue(int hkey, String key, String value)
-			throws IllegalArgumentException, IllegalAccessException,
-			InvocationTargetException {
-		int rc = -1;
-		if (hkey == HKEY_LOCAL_MACHINE) {
-			rc = deleteValue(systemRoot, hkey, key, value);
-		} else if (hkey == HKEY_CURRENT_USER) {
-			rc = deleteValue(userRoot, hkey, key, value);
-		}
-		if (rc != REG_SUCCESS) {
-			throw new IllegalArgumentException("rc=" + rc + "  key=" + key
-					+ "  value=" + value);
-		}
-	}
-
-	// =====================
+public class WinRegistry {
 
-	private static int deleteValue(Preferences root, int hkey, String key,
-			String value) throws IllegalArgumentException,
-			IllegalAccessException, InvocationTargetException {
-		int[] handles = (int[]) regOpenKey.invoke(root, new Object[] {
-				Long.valueOf(hkey), toCstr(key), KEY_ALL_ACCESS });
-		if (handles[1] != REG_SUCCESS) {
-			return handles[1]; // can be REG_NOTFOUND, REG_ACCESSDENIED
-		}
-		int rc = ((Integer) regDeleteValue.invoke(root, new Object[] {
-				Long.valueOf(handles[0]), toCstr(value) })).intValue();
-		regCloseKey.invoke(root, new Object[] { Long.valueOf(handles[0]) });
-		return rc;
-	}
+    public static final int KEY_SZ = 0;
+    public static final int KEY_DWORD = 1;
+    private static final String REG_QUERY = "reg query ";
+    private static final String REG_STR = "REG_SZ";
+    private static final String REG_DWORD = "REG_DWORD";
 
-	private static int deleteKey(Preferences root, int hkey, String key)
-			throws IllegalArgumentException, IllegalAccessException,
-			InvocationTargetException {
-		int rc = ((Integer) regDeleteKey.invoke(root, new Object[] {
-				Long.valueOf(hkey), toCstr(key) })).intValue();
-		return rc; // can REG_NOTFOUND, REG_ACCESSDENIED, REG_SUCCESS
-	}
+    static String readRegistryRegQuery(String key) throws IOException {
+        String useKey = REG_QUERY + key;
+        int keyType = -1;
+        // Run reg query, then read output with StreamReader (internal class)
+        Process process = Runtime.getRuntime().exec(useKey);
+        StreamReader reader = new StreamReader(process.getInputStream());
 
-	public static final String readRegistry(String location, String key){
+        reader.start();
         try {
-            // Run reg query, then read output with StreamReader (internal class)
-            Process process = Runtime.getRuntime().exec("reg query " + 
-                    '"'+ location + "\" /v " + key);
-
-            StreamReader reader = new StreamReader(process.getInputStream());
-            reader.start();
             process.waitFor();
             reader.join();
-            String output = reader.getResult();
+        } catch (InterruptedException e) {
+            SDFSLogger.getLog().error(e.getMessage());
+            Thread.currentThread().interrupt();
+        }
 
-            // Output has the following format:
-            // \n\n\n\t\t
-            if( ! output.contains("\t")){
-                    return null;
-            }
+        // Parse out the value
 
-            // Parse out the value
-            String[] parsed = output.split("\t");
-            return parsed[parsed.length-1];
+        String result = reader.getResult();
+        int p = -1;
+        if (result.contains(REG_STR)) {
+            p = result.indexOf(REG_STR);
+            keyType = KEY_SZ;
+        } else if (result.contains(REG_DWORD)) {
+            p = result.indexOf(REG_DWORD);
+            keyType = KEY_DWORD;
         }
-        catch (Exception e) {
+        if (p == -1) {
             return null;
         }
 
+        switch (keyType) {
+            case KEY_SZ:
+                return result.substring(p + REG_STR.length()).trim();
+            case KEY_DWORD:
+                String temp = result.substring(p + REG_DWORD.length()).trim();
+                return Integer.toString((Integer.parseInt(temp.substring("0x".length()), 16)));
+            default:
+                return "";
+        }
+
     }
 
     static class StreamReader extends Thread {
-        private InputStream is;
-        private StringWriter sw= new StringWriter();
+
+        private final InputStream mIs;
+        private final StringWriter mSw;
 
         public StreamReader(InputStream is) {
-            this.is = is;
+            this.mIs = is;
+            mSw = new StringWriter();
         }
 
         public void run() {
             try {
                 int c;
-                while ((c = is.read()) != -1)
-                    sw.write(c);
+                while ((c = mIs.read()) != -1)
+                    mSw.write(c);
+            } catch (IOException e) {
+                SDFSLogger.getLog().error(e.getMessage());
             }
-            catch (IOException e) { 
-        }
         }
 
         public String getResult() {
-            return sw.toString();
+            return mSw.toString();
         }
     }
 
-	private static String readString(Preferences root, long hkey, String key,
-			String value) throws IllegalArgumentException,
-			IllegalAccessException, InvocationTargetException {
-		Object ohandles = regOpenKey.invoke(root, new Object[] {
-				hkey, toCstr(key),KEY_READ });
-		long[] handles = (long[])ohandles;
-		if (handles[1] != REG_SUCCESS) {
-			return null;
-		}
-		byte[] valb = (byte[]) regQueryValueEx.invoke(root, new Object[] {
-				handles[0], toCstr(value) });
-		regCloseKey.invoke(root, new Object[] {Long.valueOf( handles[0]) });
-		return (valb != null ? new String(valb).trim() : null);
-	}
-
-	private static Map readStringValues(Preferences root,
-			int hkey, String key) throws IllegalArgumentException,
-			IllegalAccessException, InvocationTargetException {
-		HashMap results = new HashMap();
-		int[] handles = (int[]) regOpenKey.invoke(root, new Object[] {
-				Long.valueOf(hkey), toCstr(key), KEY_READ });
-		if (handles[1] != REG_SUCCESS) {
-			return null;
-		}
-		int[] info = (int[]) regQueryInfoKey.invoke(root,
-				new Object[] { Long.valueOf(handles[0]) });
-
-		int count = info[0]; // count
-		int maxlen = info[3]; // value length max
-		for (int index = 0; index < count; index++) {
-			byte[] name = (byte[]) regEnumValue.invoke(root, new Object[] {
-				Long.valueOf(handles[0]), index,
-					maxlen + 1 });
-			String value = readString(hkey, key, new String(name));
-			results.put(new String(name).trim(), value);
-		}
-		regCloseKey.invoke(root, new Object[] {Long.valueOf(handles[0]) });
-		return results;
-	}
-
-	private static List readStringSubKeys(Preferences root, int hkey,
-			String key) throws IllegalArgumentException,
-			IllegalAccessException, InvocationTargetException {
-		List results = new ArrayList();
-		int[] handles = (int[]) regOpenKey.invoke(root, new Object[] {
-			Long.valueOf(hkey), toCstr(key), KEY_READ });
-		if (handles[1] != REG_SUCCESS) {
-			return null;
-		}
-		int[] info = (int[]) regQueryInfoKey.invoke(root,
-				new Object[] { Long.valueOf(handles[0]) });
-
-		int count = info[0]; // Fix: info[2] was being used here with wrong
-								// results. Suggested by davenpcj, confirmed by
-								// Petrucio
-		int maxlen = info[3]; // value length max
-		for (int index = 0; index < count; index++) {
-			byte[] name = (byte[]) regEnumKeyEx.invoke(root, new Object[] {
-				Long.valueOf(handles[0]), index,
-					maxlen + 1 });
-			results.add(new String(name).trim());
-		}
-		regCloseKey.invoke(root, new Object[] {Long.valueOf(handles[0]) });
-		return results;
-	}
-
-	private static int[] createKey(Preferences root, int hkey, String key)
-			throws IllegalArgumentException, IllegalAccessException,
-			InvocationTargetException {
-		return (int[]) regCreateKeyEx.invoke(root, new Object[] {
-			Long.valueOf(hkey), toCstr(key) });
-	}
-
-	private static void writeStringValue(Preferences root, int hkey,
-			String key, String valueName, String value)
-			throws IllegalArgumentException, IllegalAccessException,
-			InvocationTargetException {
-		int[] handles = (int[]) regOpenKey.invoke(root, new Object[] {
-			Long.valueOf(hkey), toCstr(key), KEY_ALL_ACCESS });
-
-		regSetValueEx.invoke(root, new Object[] { Long.valueOf(handles[0]),
-				toCstr(valueName), toCstr(value) });
-		regCloseKey.invoke(root, new Object[] { Long.valueOf(handles[0]) });
-	}
-
-	// utility
-	private static byte[] toCstr(String str) {
-		byte[] result = new byte[str.length() + 1];
+    public static String readRegistry(String location, String key) throws IOException {
+        String pathkey = "\"" +
+                location +
+                "\" /v " +
+                key;
+        return readRegistryRegQuery(pathkey);
+    }
 
-		for (int i = 0; i < str.length(); i++) {
-			result[i] = (byte) str.charAt(i);
-		}
-		result[str.length()] = 0;
-		return result;
-	}
+    public static void main(String[] args) throws IllegalArgumentException,
+            IllegalAccessException, InvocationTargetException {
+        // System.out.println(WinRegistry.readString(HKEY_LOCAL_MACHINE,
+        // "SOFTWARE\\Wow6432Node\\SDFS", "path"));
+        System.out.println("Running Winregistry class");
+    }
 
-	public static void main(String[] args) throws IllegalArgumentException,
-			IllegalAccessException, InvocationTargetException {
-		System.out.println(WinRegistry.readString(HKEY_LOCAL_MACHINE,
-				"SOFTWARE\\Wow6432Node\\SDFS", "path"));
-	}
 }
diff --git a/src/org/opendedup/util/EasyX509TrustManager.java b/src/org/opendedup/util/EasyX509TrustManager.java
index ad1aeda69..be4543892 100644
--- a/src/org/opendedup/util/EasyX509TrustManager.java
+++ b/src/org/opendedup/util/EasyX509TrustManager.java
@@ -44,7 +44,6 @@
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.log4j.Logger;
 import org.opendedup.logging.SDFSLogger;
 import org.opendedup.sdfs.mgmt.grpc.IOServer;
 
@@ -60,10 +59,10 @@
  * reasons, unless it is a concious decision and you are perfectly aware of
  * security implications of accepting self-signed certificates
  * 

- * + * * @author Adrian Sutton * @author Oleg Kalnichevski - * + * *

* DISCLAIMER: HttpClient developers DO NOT actively support this * component. The component is provided as a reference material, which @@ -77,7 +76,6 @@ public class EasyX509TrustManager implements X509TrustManager { /** Log object for this class. */ private static final Log LOG = LogFactory .getLog(EasyX509TrustManager.class); - private Logger logger = SDFSLogger.getLog(); /** * Constructor for EasyX509TrustManager. @@ -101,14 +99,14 @@ public EasyX509TrustManager() public void checkClientTrusted(X509Certificate[] certificates, String authType) throws CertificateException { try { - logger.info("EASYX509 checkClientTrusted"); + SDFSLogger.getLog().info("EASYX509 checkClientTrusted authtype="+authType); File trustedCertificatesDir=new File(IOServer.trustStoreDir); loadTrustManager(trustedCertificatesDir,ClientAuth.REQUIRE); standardTrustManager.checkClientTrusted(certificates, authType); } catch (Exception e) { - logger.info("EASYX509 checkClientTrusted caught exception"); + SDFSLogger.getLog().error("EASYX509 checkClientTrusted caught exception",e); throw new CertificateException("Error occurred while setting up trust manager." + e.getCause(), e); - } + } } /** @@ -136,14 +134,14 @@ public void checkServerTrusted(X509Certificate[] certificates, public X509Certificate[] getAcceptedIssuers() { return this.standardTrustManager.getAcceptedIssuers(); } - + public void loadTrustManager(File trustedCertificatesDir,ClientAuth clientAuth) throws Exception { SDFSLogger.getLog().info("Load Trust Manager"); KeyStore trustStore = KeyStore.getInstance( KeyStore.getDefaultType() ); trustStore.load( null, null ); - - //Implementing FileFilter to retrieve only the files in the directory - FileFilter fileFilter = new FileFilter() { + + //Implementing FileFilter to retrieve only the files in the directory + FileFilter fileFilter = new FileFilter() { @Override public boolean accept(File file) { if(file.isDirectory()) { @@ -154,7 +152,7 @@ public boolean accept(File file) { } } }; - + File[] trustedCertFiles = trustedCertificatesDir.listFiles(fileFilter); if ( trustedCertFiles == null ) { @@ -172,7 +170,7 @@ public boolean accept(File file) { X509Certificate cert = (X509Certificate) certificateFactory.generateCertificate( input ); trustStore.setCertificateEntry( Integer.toString( i++ ), cert ); } catch (CertificateException e) { - SDFSLogger.getLog().warn("Not a certificate file, skipping it to add in TrustStore."); + SDFSLogger.getLog().debug("Not a certificate file, skipping it to add in TrustStore."); continue; } catch ( Exception e ) { @@ -181,10 +179,10 @@ public boolean accept(File file) { } } } - + TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance( TrustManagerFactory.getDefaultAlgorithm() ); trustManagerFactory.init( trustStore ); - + TrustManager[] trustManagers = trustManagerFactory.getTrustManagers(); for (TrustManager t : trustManagers) { if (t instanceof X509TrustManager) { @@ -192,8 +190,8 @@ public boolean accept(File file) { return; } } - + throw new NoSuchAlgorithmException( - "No X509TrustManager in TrustManagerFactory"); + "No X509TrustManager in TrustManagerFactory"); } } \ No newline at end of file diff --git a/src/org/opendedup/util/EncryptUtils.java b/src/org/opendedup/util/EncryptUtils.java index 09c501b2e..4938fd49f 100644 --- a/src/org/opendedup/util/EncryptUtils.java +++ b/src/org/opendedup/util/EncryptUtils.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com + * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com * * This file is part of OpenDedupe SDFS. * @@ -31,6 +31,7 @@ import javax.crypto.spec.SecretKeySpec; import org.apache.commons.io.IOUtils; +import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.opendedup.hashing.HashFunctions; import org.opendedup.logging.SDFSLogger; import org.opendedup.sdfs.Main; @@ -44,9 +45,9 @@ public class EncryptUtils { private static final IvParameterSpec spec = new IvParameterSpec(iv); static { try { + //Security.addProvider(new BouncyCastleProvider()); keyBytes = HashFunctions.getSHAHashBytes(Main.chunkStoreEncryptionKey.getBytes()); oldKeyBytes = HashFunctions.getSHAHashBytes("Password".getBytes()); - Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); key = new SecretKeySpec(keyBytes, "AES"); oldKey = new SecretKeySpec(oldKeyBytes, "AES"); } catch (Exception e) { @@ -68,7 +69,7 @@ public static byte[] decrypt(byte[] encryptedChunk) throws IOException { public static byte[] encryptCBC(byte[] chunk) throws IOException { return encryptCBC(chunk,false); } - + public static byte[] encryptCBC(byte[] chunk,boolean useOldKey) throws IOException { try { @@ -85,7 +86,7 @@ public static byte[] encryptCBC(byte[] chunk,boolean useOldKey) throws IOExcepti } } - + public static byte[] decryptCBC(byte[] encChunk) throws IOException { @@ -256,7 +257,7 @@ public static void decryptFile(File src, File dst, IvParameterSpec ivspec) throw fos.close(); cis.close(); }catch (Exception e) { - + Cipher encrypt = Cipher.getInstance("AES/CBC/PKCS5Padding"); encrypt.init(Cipher.DECRYPT_MODE, oldKey, ivspec); diff --git a/src/org/opendedup/util/FileHashing.java b/src/org/opendedup/util/FileHashing.java new file mode 100644 index 000000000..378a193cf --- /dev/null +++ b/src/org/opendedup/util/FileHashing.java @@ -0,0 +1,25 @@ +package org.opendedup.util; + +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +public class FileHashing { + + public static byte[] checksuMD5(String filepath) throws IOException, NoSuchAlgorithmException { + MessageDigest md = MessageDigest.getInstance("MD5"); + // DigestInputStream is better, but you also can hash file like this. + try (InputStream fis = new FileInputStream(filepath)) { + byte[] buffer = new byte[1024]; + int nread; + while ((nread = fis.read(buffer)) != -1) { + md.update(buffer, 0, nread); + } + } + return md.digest(); + + } + +} diff --git a/src/org/opendedup/util/FileLock.java b/src/org/opendedup/util/FileLock.java index d42e0e250..682acaa62 100644 --- a/src/org/opendedup/util/FileLock.java +++ b/src/org/opendedup/util/FileLock.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com + * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com * * This file is part of OpenDedupe SDFS. * @@ -26,6 +26,7 @@ public class FileLock { private ConcurrentHashMap activeTasks = new ConcurrentHashMap(); private static ReentrantLock iLock = new ReentrantLock(true); + public ReentrantLock getLock(String st) { iLock.lock(); try { @@ -54,9 +55,8 @@ public void removeLock(String st) { l.unlock(); } } finally { - if (SDFSLogger.isDebug()) - SDFSLogger.getLog().debug( - "hmpa size=" + this.activeTasks.size()); + SDFSLogger.getLog().debug( + "hmpa size=" + this.activeTasks.size()); iLock.unlock(); } } diff --git a/src/org/opendedup/util/FindOpenPort.java b/src/org/opendedup/util/FindOpenPort.java index 2176ce09c..9078029df 100644 --- a/src/org/opendedup/util/FindOpenPort.java +++ b/src/org/opendedup/util/FindOpenPort.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com + * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com * * This file is part of OpenDedupe SDFS. * @@ -19,6 +19,7 @@ package org.opendedup.util; import java.io.IOException; +import java.net.InetAddress; import java.net.ServerSocket; import java.io.File; import java.io.FileOutputStream; @@ -50,6 +51,9 @@ public void lock() throws IOException, InterruptedException { SDFSLogger.getLog().info("Lock FindOpenPort"); File file = new File(portfilepath); + if(!file.getParentFile().exists()) { + file.getParentFile().mkdirs(); + } fileChannel = new FileOutputStream(file, true).getChannel(); while (fileChannel.lock() == null) { // the process checks if the channel is free to write to the file @@ -66,9 +70,10 @@ public void unlock() throws IOException, InterruptedException { SDFSLogger.getLog().info("Unlock Done"); } - public static int pickFreePort(int start) + public static int pickFreePort(int start, int maxRange) { + int range = 0; int port = -1; while (port == -1) { ServerSocket socket = null; @@ -77,9 +82,13 @@ public static int pickFreePort(int start) { - socket = new ServerSocket(start); + socket = new ServerSocket(start, 50, InetAddress.getByAddress(new byte[] { 0x00, 0x00, 0x00, 0x00 })); port = socket.getLocalPort(); + if (maxRange > 0 && range == maxRange) { + SDFSLogger.getLog().info("PickFreePort - Out of Range Specified"); + return 0; + } } @@ -115,13 +124,18 @@ public static int pickFreePort(int start) } start++; + if (maxRange > 0) { + range++; + } } + SDFSLogger.getLog().info("Free Port Identified: - " + port); + return port; } public static void main(String[] args) { - System.out.println(pickFreePort(6442)); + System.out.println(pickFreePort(6442, -1)); } } diff --git a/src/org/opendedup/util/HashFunctions.java b/src/org/opendedup/util/HashFunctions.java index c04af4ff3..c1e44e591 100755 --- a/src/org/opendedup/util/HashFunctions.java +++ b/src/org/opendedup/util/HashFunctions.java @@ -38,7 +38,7 @@ /** * This is a very fast, non-cryptographic hash suitable for general hash-based * lookup. See http://murmurhash.googlepages.com/ for more details. - * + * *

* The C version of MurmurHash 2.0 found at that site was ported to Java by * Andrzej Bialecki (ab at getopt org). @@ -51,7 +51,6 @@ public class HashFunctions { static { try { - Security.addProvider(new BouncyCastleProvider()); algorithm = MessageDigest.getInstance("Tiger", "BC"); } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block @@ -218,7 +217,7 @@ public static void main(String[] args) throws Exception { * = System.currentTimeMillis() - start; System.out.println("Took " + * duration + " ms"); System.out.println("Hashes per ms = " + * (numberOfTries / duration)); - * + * * ? */ String rndStr = getRandomString(12); @@ -280,7 +279,7 @@ public static byte[] getTigerHashBytes(byte[] input) /* * public static String getMD5Hash(byte[] input) { MD5 md5 = new MD5(); * md5.Update(input); return md5.asHex(); } - * + * * public static byte[] getMD5ByteHash(byte[] input) { MD5 md5 = new MD5(); * md5.Update(input); byte[] b = md5.Final(); md5 = null; return b; } */ diff --git a/src/org/opendedup/util/KeyGenerator.java b/src/org/opendedup/util/KeyGenerator.java index 6e6b1e39d..f159b6724 100644 --- a/src/org/opendedup/util/KeyGenerator.java +++ b/src/org/opendedup/util/KeyGenerator.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com + * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com * * This file is part of OpenDedupe SDFS. * @@ -19,7 +19,6 @@ package org.opendedup.util; import java.io.File; -import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; @@ -35,23 +34,19 @@ import java.security.cert.X509Certificate; import java.util.Calendar; import java.util.Date; -import java.util.Enumeration; import org.bouncycastle.asn1.ASN1Encodable; import org.bouncycastle.asn1.ASN1Primitive; -import org.bouncycastle.asn1.DERSequence; import org.bouncycastle.asn1.pkcs.PrivateKeyInfo; import org.bouncycastle.asn1.x500.X500Name; import org.bouncycastle.asn1.x509.BasicConstraints; import org.bouncycastle.asn1.x509.Extension; import org.bouncycastle.asn1.x509.GeneralName; import org.bouncycastle.asn1.x509.GeneralNames; -import org.bouncycastle.asn1.x509.KeyUsage; import org.bouncycastle.asn1.x509.X509Extensions; import org.bouncycastle.cert.X509CertificateHolder; import org.bouncycastle.cert.X509v3CertificateBuilder; import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter; -import org.bouncycastle.cert.jcajce.JcaX509CertificateHolder; import org.bouncycastle.cert.jcajce.JcaX509ExtensionUtils; import org.bouncycastle.cert.jcajce.JcaX509v3CertificateBuilder; import org.bouncycastle.jce.X509Principal; @@ -59,9 +54,6 @@ import org.bouncycastle.openssl.jcajce.JcaPEMWriter; import org.bouncycastle.operator.ContentSigner; import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder; -import org.bouncycastle.pkcs.PKCS10CertificationRequest; -import org.bouncycastle.pkcs.PKCS10CertificationRequestBuilder; -import org.bouncycastle.pkcs.jcajce.JcaPKCS10CertificationRequestBuilder; import org.bouncycastle.util.encoders.Base64; import org.bouncycastle.util.io.pem.PemObject; import org.bouncycastle.x509.X509V3CertificateGenerator; @@ -128,7 +120,7 @@ public static void generateKey(File key) throws IOException { // Sign the new KeyPair with the root cert Private Key ContentSigner csrContentSigner = csrBuilder.build(pKey.getPrivateKey()); PKCS10CertificationRequest csr = p10Builder.build(csrContentSigner); - + Date startDate = new Date(System.currentTimeMillis() - 1000L * 60 * 60 * 24 * 30); Date endDate = new Date(System.currentTimeMillis() + (1000L * 60 * 60 * 24 * 365 * 10)); @@ -145,7 +137,7 @@ public static void generateKey(File key) throws IOException { //issuedCertBuilder.addExtension(Extension.basicConstraints, true, new BasicConstraints(false)); // Add Issuer cert identifier as Extension - + issuedCertBuilder.addExtension(Extension.authorityKeyIdentifier, false, issuedCertExtUtils.createAuthorityKeyIdentifier(rootCert)); issuedCertBuilder.addExtension(Extension.subjectKeyIdentifier, false, diff --git a/src/org/opendedup/util/List.java b/src/org/opendedup/util/List.java new file mode 100644 index 000000000..df38e9cf9 --- /dev/null +++ b/src/org/opendedup/util/List.java @@ -0,0 +1,5 @@ +package org.opendedup.util; + +public class List { + +} diff --git a/src/org/opendedup/util/OSValidator.java b/src/org/opendedup/util/OSValidator.java index d95dbee07..121538815 100644 --- a/src/org/opendedup/util/OSValidator.java +++ b/src/org/opendedup/util/OSValidator.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com + * Copyright (C) 2016 Sam Silverberg sam.silverberg@gmail.com * * This file is part of OpenDedupe SDFS. * @@ -67,16 +67,16 @@ public static boolean isUnix() { } public static String getProgramBasePath() { - if (isUnix() || isMac()) - if(Main.sdfsBasePath.equals("")) { - return "/opt/sdfs/"; - } else { - return Main.sdfsBasePath; - } - else { + if (isUnix() || isMac()) { + if (Main.sdfsBasePath.equals("")) { + return "/opt/sdfs/"; + } else { + return Main.sdfsBasePath; + } + } else { try { - return WinRegistry.readString(WinRegistry.HKEY_LOCAL_MACHINE, - "SOFTWARE\\Wow6432Node\\SDFS", "path") + File.separator; + return WinRegistry.readRegistry( + "HKEY_LOCAL_MACHINE\\SOFTWARE\\SDFS", "path") + File.separator; } catch (Exception e) { return System.getenv("programfiles") + File.separator + "sdfs" + File.separator; @@ -85,12 +85,12 @@ public static String getProgramBasePath() { } public static String getConfigPath() { - if (isUnix() || isMac()) - return "/etc/sdfs/"; - else + if (isUnix() || isMac()) { + return Main.sdfsBasePath + "/etc/sdfs/"; + } else try { - return WinRegistry.readString(WinRegistry.HKEY_LOCAL_MACHINE, - "SOFTWARE\\Wow6432Node\\SDFS", "path") + return WinRegistry.readRegistry( + "HKEY_LOCAL_MACHINE\\SOFTWARE\\SDFS", "path") + File.separator + "etc" + File.separator; } catch (Exception e) { diff --git a/src/org/opendedup/util/StorageUnit.java b/src/org/opendedup/util/StorageUnit.java index 71fed3cd6..2836ddaa0 100644 --- a/src/org/opendedup/util/StorageUnit.java +++ b/src/org/opendedup/util/StorageUnit.java @@ -18,9 +18,14 @@ *******************************************************************************/ package org.opendedup.util; +import java.util.Locale; + +import org.opendedup.logging.SDFSLogger; + public enum StorageUnit { BYTE("B", 1L), KILOBYTE("KB", 1L << 10), MEGABYTE("MB", 1L << 20), GIGABYTE( - "GB", 1L << 30), TERABYTE("TB", 1L << 40), PETABYTE("PB", 1L << 50), EXABYTE( + "GB", 1L << 30), + TERABYTE("TB", 1L << 40), PETABYTE("PB", 1L << 50), EXABYTE( "EB", 1L << 60); public static final StorageUnit BASE = BYTE; @@ -79,6 +84,26 @@ public String format(long number) { return nf.format(number / (double) divider) + " " + symbol; } + public String number_format(double number) { + SDFSLogger.getLog().debug("number_format called"); + java.text.NumberFormat nf2 = java.text.NumberFormat + .getInstance(Locale.US); + nf2.setGroupingUsed(false); + nf2.setMinimumFractionDigits(0); + nf2.setMaximumFractionDigits(2); + return nf2.format(number / (double) divider) + " " + symbol; + } + + public String number_format(long number) { + SDFSLogger.getLog().debug("number_format called"); + java.text.NumberFormat nf2 = java.text.NumberFormat + .getInstance(Locale.US); + nf2.setGroupingUsed(false); + nf2.setMinimumFractionDigits(0); + nf2.setMaximumFractionDigits(2); + return nf2.format(number / (double) divider) + " " + symbol; + } + private static java.text.NumberFormat nf = java.text.NumberFormat .getInstance(); static { diff --git a/src/org/opendedup/util/StringUtils.java b/src/org/opendedup/util/StringUtils.java index 67d2d5797..2ca9ad755 100755 --- a/src/org/opendedup/util/StringUtils.java +++ b/src/org/opendedup/util/StringUtils.java @@ -26,6 +26,8 @@ import java.util.Random; import java.util.regex.Pattern; +import org.opendedup.logging.SDFSLogger; + public class StringUtils { final static long pbc = 1125899906842624L; final static long tbc = 1099511627776L; @@ -99,9 +101,17 @@ public static byte[] getHexBytes(String hex) { public static long parseSize(String capString) throws IOException { String units = capString.substring(capString.length() - 2); - float sz = Float.parseFloat(capString.substring(0, + String str = (capString.substring(0, capString.length() - 2)); long fSize = 0; + SDFSLogger.getLog().debug("str = " + str); + SDFSLogger.getLog().debug("units = " + units); + int index = str.indexOf(","); + if(index>0) + { + str = str.substring(0, index) + "." + str.substring(index + 1); + } + float sz = Float.parseFloat(str); if (units.equalsIgnoreCase("PB")) fSize = (long) (sz * pbc); else if (units.equalsIgnoreCase("TB")) diff --git a/src/proto/CloudFileInfo.proto b/src/proto/CloudFileInfo.proto index a57aad2d1..737e90681 100644 --- a/src/proto/CloudFileInfo.proto +++ b/src/proto/CloudFileInfo.proto @@ -6,5 +6,5 @@ option go_package = "github.com/opendedup/sdfs-client-go/sdfs/;sdfs"; message CloudMetaData { int64 date = 1; map attributes = 2; - + int64 pvolumeID =3; } \ No newline at end of file diff --git a/src/proto/EncryptionService.proto b/src/proto/EncryptionService.proto new file mode 100644 index 000000000..62f0f4325 --- /dev/null +++ b/src/proto/EncryptionService.proto @@ -0,0 +1,41 @@ +syntax = "proto3"; +option go_package = "github.com/opendedup/sdfs-client-go/sdfs/;sdfs"; +package org.opendedup.grpc; +//option java_multiple_files = true; +import "FileInfo.proto"; + + +// Request payload +message EncryptionKeyVerifyRequest { + string hash = 1; +} + +message EncryptionKeyVerifyResponse { + bool accept =1; + errorCodes errorCode = 2; + string error = 3; +} + +message ExportServerCertRequest { +} + +message ExportServerCertResponse { + bytes privateKey = 1; + bytes certChain = 2; + errorCodes errorCode = 3; + string error = 4; +} + +message DeleteExportedCertRequest { +} + +message DeleteExportedCertResponse { + errorCodes errorCode = 1; + string error = 2; +} + +service EncryptionService { + rpc ValidateCertificate(EncryptionKeyVerifyRequest) returns (EncryptionKeyVerifyResponse); + rpc ExportServerCertificate(ExportServerCertRequest) returns (ExportServerCertResponse); + rpc DeleteExportedCert(DeleteExportedCertRequest) returns (DeleteExportedCertResponse); +} diff --git a/src/proto/FileInfo.proto b/src/proto/FileInfo.proto index 22ad43296..5d297bcfc 100644 --- a/src/proto/FileInfo.proto +++ b/src/proto/FileInfo.proto @@ -9,6 +9,7 @@ message FileInfoRequest { bool compact =2; int32 numberOfFiles =3; string listGuid=4; + int64 pvolumeID =5; } message FileMessageResponse { @@ -181,7 +182,7 @@ message FileInfoResponse { string id = 20; repeated FileInfoResponse files = 21; string parentPath = 22; - string volumeid = 23; + int64 pvolumeID = 23; IOMonitorResponse ioMonitor = 24; string symlinkPath = 25; int64 group_id = 26; @@ -219,6 +220,7 @@ message IOMonitorResponse { message WFileAttributesRequest { repeated FileAttributes fileAttributes = 1; string filePath =2; + int64 pvolumeID =3; } message WFileAttributesResponse { @@ -228,6 +230,7 @@ message WFileAttributesResponse { message RFileAttributesRequest { string filePath = 1; + int64 pvolumeID =2; } message RFileAttributesResponse { diff --git a/src/proto/IOService.proto b/src/proto/IOService.proto index 1ce0e1b63..769fed967 100644 --- a/src/proto/IOService.proto +++ b/src/proto/IOService.proto @@ -10,16 +10,20 @@ message DataWriteRequest { int64 start =2; int32 len = 3; bytes data = 4; + int64 pvolumeID =5; + bool compressed =6; } message DataWriteResponse { string error = 1; errorCodes errorCode = 2; + int64 written = 3; } message MkDirRequest { string path = 1; int32 mode = 2; + int64 pvolumeID =3; } message MkDirResponse { @@ -29,6 +33,7 @@ message MkDirResponse { message RmDirRequest { string path = 1; + int64 pvolumeID =2; } message RmDirResponse { @@ -38,6 +43,7 @@ message RmDirResponse { message UnlinkRequest { string path = 1; + int64 pvolumeID =2; } message UnlinkResponse { @@ -49,6 +55,8 @@ message DataReadRequest { int64 fileHandle = 1; int64 start =2; int32 len = 3; + int64 pvolumeID =4; + bool compress =5; } message DataReadResponse { @@ -56,10 +64,13 @@ message DataReadResponse { int32 read = 2; string error = 3; errorCodes errorCode = 4; + bool compressed = 5; } message FileCloseRequest { int64 fileHandle = 1; + int64 pvolumeID =2; + } message FileCloseResponse { @@ -71,6 +82,8 @@ message MkNodRequest { string path = 1; int32 mode = 2; int32 rdev =3; + int64 pvolumeID =4; + } message MkNodResponse { @@ -81,16 +94,21 @@ message MkNodResponse { message FileOpenRequest { string path = 1; int32 flags =2; + int64 pvolumeID =3; + } message FileExistsRequest { string path = 1; + int64 pvolumeID =2; + } message FileExistsResponse { bool exists = 1; string error = 2; errorCodes errorCode = 3; + int64 pvolumeID =4; } @@ -103,6 +121,7 @@ message FileOpenResponse { message FileSnapshotRequest { string src =1; string dest = 2; + int64 pvolumeID =3; } message FileSnapshotResponse { @@ -114,6 +133,7 @@ message FileSnapshotResponse { message FileRenameRequest { string src =1; string dest = 2; + int64 pvolumeID =3; } message FileRenameResponse { @@ -127,6 +147,7 @@ message CopyExtentRequest { int64 srcStart = 3; int64 dstStart = 4; int64 length = 5; + int64 pvolumeID =6; } message CopyExtentResponse { @@ -138,11 +159,13 @@ message CopyExtentResponse { message SetUserMetaDataRequest { repeated FileAttributes fileAttributes = 1; string Path =2; + int64 pvolumeID =3; } message SetUserMetaDataResponse { string error = 1; errorCodes errorCode = 2; + } message GetCloudFileRequest { @@ -150,6 +173,7 @@ message GetCloudFileRequest { string dstfile = 2; bool overwrite = 3; string changeid = 4; + int64 pvolumeID =5; } message GetCloudFileResponse { @@ -161,6 +185,7 @@ message GetCloudFileResponse { message ChmodRequest { string path = 1; int32 mode = 2; + int64 pvolumeID =3; } message ChmodResponse { @@ -172,6 +197,7 @@ message ChownRequest { string path = 1; int32 uid = 2; int32 gid = 3; + int64 pvolumeID =4; } message ChownResponse { @@ -182,6 +208,7 @@ message ChownResponse { message FlushRequest { string path = 1; int64 fd = 2; + int64 pvolumeID =3; } message FlushResponse { @@ -207,6 +234,7 @@ message Stat { message StatRequest { string path =1; + int64 pvolumeID =2; } message StatResponse { @@ -217,6 +245,7 @@ message StatResponse { message LinkRequest { string path = 1; + int64 pvolumeID =2; } message LinkResponse { @@ -232,14 +261,16 @@ message StatFS { int64 bavail = 4;/* Free blocks available to unprivileged user */ int64 files = 5; /* Total inodes in filesystem */ int64 ffree = 6; /* Free inodes in filesystem */ - int64 fsid = 7; /* Filesystem ID */ + int64 fsid = 7; /* Filesystem ID */ int32 namelen = 8; /* Maximum length of filenames */ int32 frsize = 9; /* Fragment size (since Linux 2.6) */ int32 flags = 10; /* Mount flags of filesystem */ int32 type = 11; /* Type of filesystem (see below) */ } -message StatFSRequest {} +message StatFSRequest { + int64 pvolumeID =1; +} message StatFSResponse { StatFS stat = 1; @@ -250,6 +281,7 @@ message StatFSResponse { message SymLinkRequest { string from =1; string to = 2; + int64 pvolumeID =3; } message SymLinkResponse { @@ -260,6 +292,7 @@ message SymLinkResponse { message TruncateRequest { string path = 1; int64 length = 2; + int64 pvolumeID =3; } message TruncateResponse { @@ -271,6 +304,7 @@ message UtimeRequest { string path = 1; int64 atime = 2; int64 mtime = 3; + int64 pvolumeID =4; } message UtimeResponse { @@ -281,6 +315,7 @@ message UtimeResponse { message GetXAttrRequest { string attr = 1; string path = 2; + int64 pvolumeID =3; } message GetXAttrResponse { @@ -293,6 +328,7 @@ message SetXAttrRequest { string attr = 1; string value = 2; string path = 3; + int64 pvolumeID =4; } message SetXAttrResponse { @@ -309,6 +345,7 @@ message SetXAttrResponse { message RemoveXAttrRequest { string attr = 1; string path = 2; + int64 pvolumeID =3; } message RemoveXAttrResponse { @@ -319,6 +356,7 @@ message RemoveXAttrResponse { message GetXAttrSizeRequest { string attr = 1; string path = 2; + int64 pvolumeID =3; } message GetXAttrSizeResponse { @@ -331,6 +369,7 @@ message FsyncRequest { string path = 1; int64 fh = 2; bool datasync = 3; + int64 pvolumeID =4; } message FsyncResponse { @@ -340,6 +379,27 @@ message FsyncResponse { message SyncNotificationSubscription { string uid = 1; + int64 pvolumeID =2; +} + +message SetRetrievalTierRequest { + string tierType = 1; + int64 pvolumeID = 2; +} + +message SetRetrievalTierResponse { + string error = 1; + errorCodes errorCode = 2; +} + +message GetRetrievalTierRequest { + int64 pvolumeID = 1; +} + +message GetRetrievalTierResponse { + string tierType = 1; + string error = 2; + errorCodes errorCode = 3; } @@ -362,6 +422,7 @@ service FileIOService { rpc RmDir(RmDirRequest) returns (RmDirResponse); rpc Unlink(UnlinkRequest) returns (UnlinkResponse); rpc Write(DataWriteRequest) returns (DataWriteResponse); + rpc StreamWrite(stream DataWriteRequest) returns (DataWriteResponse) {} rpc Read(DataReadRequest) returns (DataReadResponse); rpc Release(FileCloseRequest) returns (FileCloseResponse); rpc Mknod(MkNodRequest) returns (MkNodResponse); @@ -378,5 +439,7 @@ service FileIOService { rpc GetCloudMetaFile(GetCloudFileRequest) returns (GetCloudFileResponse); rpc StatFS(StatFSRequest) returns (StatFSResponse); rpc fileNotification (SyncNotificationSubscription) returns (stream FileMessageResponse) {}; + rpc SetRetrievalTier(SetRetrievalTierRequest) returns (SetRetrievalTierResponse); + rpc GetRetrievalTier(GetRetrievalTierRequest) returns (GetRetrievalTierResponse); } diff --git a/src/proto/PortRedirector.proto b/src/proto/PortRedirector.proto new file mode 100644 index 000000000..821b02826 --- /dev/null +++ b/src/proto/PortRedirector.proto @@ -0,0 +1,32 @@ +syntax = "proto3"; +option go_package = "github.com/opendedup/sdfs-client-go/sdfs/;sdfs"; +package org.opendedup.grpc; +//option java_multiple_files = true; +import "FileInfo.proto"; +import "VolumeService.proto"; + + +// Request payload +message ProxyVolumeInfoRequest { +} + +message ProxyVolumeInfoResponse { + repeated VolumeInfoResponse volumeInfoResponse = 1; + string error = 2; + errorCodes errorCode = 3; +} + +message ReloadConfigRequest { +} + +message ReloadConfigResponse { + string error = 1; + errorCodes errorCode = 2; +} + + + +service PortRedirectorService { + rpc GetProxyVolumes(ProxyVolumeInfoRequest) returns (ProxyVolumeInfoResponse); + rpc ReloadConfig(ReloadConfigRequest) returns (ReloadConfigResponse); +} \ No newline at end of file diff --git a/src/proto/SDFSCli.proto b/src/proto/SDFSCli.proto index a31b0af0c..acbc34d05 100644 --- a/src/proto/SDFSCli.proto +++ b/src/proto/SDFSCli.proto @@ -40,6 +40,7 @@ message AddUserRequest { string password =2; string description = 3; SdfsPermissions permissions =5; + int64 pvolumeID =6; } message AddUserResponse { @@ -49,6 +50,7 @@ message AddUserResponse { message DeleteUserRequest { string user=1; + int64 pvolumeID =2; } message DeleteUserResponse { @@ -58,17 +60,20 @@ message DeleteUserResponse { message SetPermissionsRequest { string user =1; - SdfsPermissions permissions =5; + SdfsPermissions permissions =2; + int64 pvolumeID =3; } message SetPermissionsResponse { string error = 1; errorCodes errorCode = 2; + } message SetUserPasswordRequest { string user =1; string password =2; + int64 pvolumeID =3; } message SetUserPasswordResponse { @@ -77,6 +82,7 @@ message SetUserPasswordResponse { } message ListUsersRequest { + int64 pvolumeID =1; } diff --git a/src/proto/SDFSEvent.proto b/src/proto/SDFSEvent.proto index 751e56815..938ab5e02 100644 --- a/src/proto/SDFSEvent.proto +++ b/src/proto/SDFSEvent.proto @@ -26,6 +26,7 @@ message SDFSEvent { message SDFSEventRequest { string uuid = 1; + int64 pvolumeID =2; } message SDFSEventResponse { @@ -35,6 +36,7 @@ message SDFSEventResponse { } message SDFSEventListRequest { + int64 pvolumeID =1; } message SDFSEventListResponse { diff --git a/src/proto/Shutdown.proto b/src/proto/Shutdown.proto index 92cda13dd..572d3986f 100644 --- a/src/proto/Shutdown.proto +++ b/src/proto/Shutdown.proto @@ -6,6 +6,7 @@ import "FileInfo.proto"; // Request payload message ShutdownRequest { + int64 pvolumeID =1; } diff --git a/src/proto/Storage.proto b/src/proto/Storage.proto index 849368e41..50082b10e 100644 --- a/src/proto/Storage.proto +++ b/src/proto/Storage.proto @@ -7,10 +7,9 @@ import "FileInfo.proto"; message CheckHashesRequest { repeated bytes hashes =1; + int64 pvolumeID =2; } - - message CheckHashesResponse { repeated int64 locations = 1; string error = 2; @@ -19,10 +18,12 @@ message CheckHashesResponse { message MetaDataDedupeFileRequest { string filePath =1; + int64 pvolumeID =2; } message SparseDedupeFileRequest { string guid =1; + int64 pvolumeID =2; } message ChunkResponse { @@ -35,12 +36,14 @@ message ChunkResponse { message ChunkEntry { bytes hash = 1; bytes data = 2; + bool compressed = 3; + int32 compressedLength = 4; } message WriteChunksRequest { - repeated ChunkEntry chunks= 1; int64 fileHandle =2; + int64 pvolumeID =3; } message WriteChunksResponse { @@ -52,6 +55,7 @@ message WriteChunksResponse { message ReadChunksRequest { repeated ChunkEntry chunks= 1; + int64 pvolumeID =2; } message ReadChunksResponse { @@ -63,6 +67,7 @@ message HashingInfoRequest { repeated ChunkEntry chunks = 1; string error = 2; errorCodes errorCode = 3; + int64 pvolumeID =4; } message HashLocPairP { @@ -88,22 +93,29 @@ message SparseDataChunkP { map ar =5; int32 doop = 6; int32 prevdoop = 7; + int32 compressedLength = 8; } message SparseDedupeChunkWriteRequest { SparseDataChunkP chunk = 1; int64 fileHandle = 2; int64 fileLocation = 3; + int64 pvolumeID =4; + bool compressed =5; + bytes compressedChunk = 6; + int32 uncompressedLen =7; } message SparseDedupeChunkWriteResponse { string error = 1; errorCodes errorCode = 2; + repeated HashLocPairP missedAr =3; } message SparseDedupeChunkReadRequest { int64 offset = 1; int64 fileHandle = 2; + int64 pvolumeID =3; } message SparseDedupeChunkReadResponse { @@ -127,6 +139,7 @@ message HashingInfoResponse { message InsertRecord { int64 hashloc = 1; bool inserted =2; + int32 compressedLength=3; } enum hashtype { diff --git a/src/proto/VolumeService.proto b/src/proto/VolumeService.proto index 535195f50..415bf71a7 100644 --- a/src/proto/VolumeService.proto +++ b/src/proto/VolumeService.proto @@ -8,8 +8,11 @@ import "FileInfo.proto"; // Request payload message VolumeInfoRequest { + int64 pvolumeID =1; } + + message VolumeInfoResponse { string path = 1; string name = 2; @@ -59,6 +62,7 @@ message SystemInfo { } message SystemInfoRequest { + int64 pvolumeID =1; } @@ -75,6 +79,7 @@ message ConnectedVolumeInfo { } message GCScheduleRequest { + int64 pvolumeID =1; } @@ -85,6 +90,7 @@ message GCScheduleResponse { } message CloudVolumesRequest { + int64 pvolumeID =1; } @@ -121,9 +127,23 @@ message DSEInfo { string cloudSecretKey = 18; string bucketName = 19; int64 maxAge = 20; + double averageLoadPenalty = 21; + int64 evictionCount = 22; + int64 hitCount = 23; + double hitRate = 24; + int64 loadCount = 25; + int64 loadExceptionCount = 26; + double loadExceptionRate = 27; + int64 loadSuccessCount = 28; + int64 missCount =29; + double missRate = 30; + int64 requestCount = 31; + int64 totalLoadTime =32; } -message DSERequest {} +message DSERequest { + int64 pvolumeID =1; +} message DSEResponse { DSEInfo info = 1; @@ -134,6 +154,7 @@ message DSEResponse { message AuthenticationRequest { string username = 1; string password = 2; + int64 pvolumeID =3; } message AuthenticationResponse { @@ -159,6 +180,7 @@ message MessageQueueInfoResponse { message CleanStoreRequest { bool compact =1; + int64 pvolumeID =2; } message CleanStoreResponse { @@ -169,6 +191,7 @@ message CleanStoreResponse { message SetCacheSizeRequest { int64 cacheSize = 1; + int64 pvolumeID =2; } message SetCacheSizeResponse { @@ -178,7 +201,8 @@ message SetCacheSizeResponse { } message DeleteCloudVolumeRequest{ - int64 volumeid = 1; + int64 rmvolume = 1; + int64 pvolumeID =2; } message DeleteCloudVolumeResponse { @@ -189,6 +213,7 @@ message DeleteCloudVolumeResponse { message SetVolumeCapacityRequest { int64 size = 1; + int64 pvolumeID =2; } message SetVolumeCapacityResponse { @@ -198,6 +223,7 @@ message SetVolumeCapacityResponse { message SetPasswordRequest { string password = 1; + int64 pvolumeID =2; } message SetPasswordResponse { @@ -207,6 +233,7 @@ message SetPasswordResponse { message SpeedRequest { int32 requestedSpeed = 1; + int64 pvolumeID =2; } message SpeedResponse { @@ -217,6 +244,7 @@ message SpeedResponse { message SyncFromVolRequest { int64 volumeid = 1; + int64 pvolumeID =2; } message SyncFromVolResponse { @@ -226,6 +254,7 @@ message SyncFromVolResponse { } message SyncVolRequest { + int64 pvolumeID =1; } @@ -237,6 +266,7 @@ message SyncVolResponse { message SetMaxAgeRequest { int64 maxAge = 1; + int64 pvolumeID =2; } message SetMaxAgeResponse { diff --git a/src/scripts/buildproto.sh b/src/scripts/buildproto.sh old mode 100644 new mode 100755 index 9a443f41b..dcda61159 --- a/src/scripts/buildproto.sh +++ b/src/scripts/buildproto.sh @@ -1 +1 @@ -protoc -I=src/proto/ --java_out=src/ src/proto/VolumeService.proto --grpc-java_out=src/ --plugin=protoc-gen-grpc-java=protoc-gen-grpc-java-1.30.2-linux-x86_64.exe +protoc -I=src/proto/ --java_out=src/ src/proto/Storage.proto --grpc-java_out=src/ --plugin=protoc-gen-grpc-java=/usr/sbin/protoc-gen-grpc-java-1.46.0-linux-x86_64.exe diff --git a/windows-exe/.vs/SDFSCli/v16/.suo b/windows-exe/.vs/SDFSCli/v16/.suo index 741831cc7..9cc449c71 100644 Binary files a/windows-exe/.vs/SDFSCli/v16/.suo and b/windows-exe/.vs/SDFSCli/v16/.suo differ diff --git a/windows-exe/.vs/SDFSCli/v16/Browse.VC.db b/windows-exe/.vs/SDFSCli/v16/Browse.VC.db index dead342ce..08b6664cd 100644 Binary files a/windows-exe/.vs/SDFSCli/v16/Browse.VC.db and b/windows-exe/.vs/SDFSCli/v16/Browse.VC.db differ diff --git a/windows-exe/.vs/SDFSCli/v16/Solution.VC.db b/windows-exe/.vs/SDFSCli/v16/Solution.VC.db index 38897a0a2..471a6bf9f 100644 Binary files a/windows-exe/.vs/SDFSCli/v16/Solution.VC.db and b/windows-exe/.vs/SDFSCli/v16/Solution.VC.db differ diff --git a/windows-exe/SDFSCli/sdfscli.cpp b/windows-exe/SDFSCli/sdfscli.cpp index 16dddf5c1..326a5e8ac 100644 --- a/windows-exe/SDFSCli/sdfscli.cpp +++ b/windows-exe/SDFSCli/sdfscli.cpp @@ -80,7 +80,7 @@ int _tmain(int argc, TCHAR *argv[]) // Create the child process. TCHAR cmd[2048]; - TCHAR *val = ReadRegValue(HKEY_LOCAL_MACHINE, "SOFTWARE\\WOW6432Node\\SDFS", "path"); + TCHAR *val = ReadRegValue(HKEY_LOCAL_MACHINE, "SOFTWARE\\SDFS", "path"); TCHAR path[512]; _tcscpy_s(path, val); _tcscpy_s(cmd, val); diff --git a/windows-exe/WindowsSetup/.vs/WindowsSetup/v16/.suo b/windows-exe/WindowsSetup/.vs/WindowsSetup/v16/.suo new file mode 100644 index 000000000..c056fbb8e Binary files /dev/null and b/windows-exe/WindowsSetup/.vs/WindowsSetup/v16/.suo differ diff --git a/windows-exe/WindowsSetup/WindowsSetup.sln b/windows-exe/WindowsSetup/WindowsSetup.sln new file mode 100644 index 000000000..7f7c7e061 --- /dev/null +++ b/windows-exe/WindowsSetup/WindowsSetup.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.32630.194 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "sdfs", "WindowsSetup\sdfs.wixproj", "{01D7F052-621C-4DD9-AA75-D2EC9F055891}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {01D7F052-621C-4DD9-AA75-D2EC9F055891}.Debug|x64.ActiveCfg = Release|x64 + {01D7F052-621C-4DD9-AA75-D2EC9F055891}.Debug|x64.Build.0 = Release|x64 + {01D7F052-621C-4DD9-AA75-D2EC9F055891}.Debug|x86.ActiveCfg = Debug|x86 + {01D7F052-621C-4DD9-AA75-D2EC9F055891}.Debug|x86.Build.0 = Debug|x86 + {01D7F052-621C-4DD9-AA75-D2EC9F055891}.Release|x64.ActiveCfg = Release|x64 + {01D7F052-621C-4DD9-AA75-D2EC9F055891}.Release|x64.Build.0 = Release|x64 + {01D7F052-621C-4DD9-AA75-D2EC9F055891}.Release|x86.ActiveCfg = Release|x86 + {01D7F052-621C-4DD9-AA75-D2EC9F055891}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {80235F93-273C-4458-B3C6-E3AAC1716660} + EndGlobalSection +EndGlobal diff --git a/windows-exe/WindowsSetup/WindowsSetup/BaseFileList.wxs b/windows-exe/WindowsSetup/WindowsSetup/BaseFileList.wxs new file mode 100644 index 000000000..beb6b217a --- /dev/null +++ b/windows-exe/WindowsSetup/WindowsSetup/BaseFileList.wxs @@ -0,0 +1,2805 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/windows-exe/WindowsSetup/WindowsSetup/HeatGeneratedFileList.wxs b/windows-exe/WindowsSetup/WindowsSetup/HeatGeneratedFileList.wxs new file mode 100644 index 000000000..1ab63f32c --- /dev/null +++ b/windows-exe/WindowsSetup/WindowsSetup/HeatGeneratedFileList.wxs @@ -0,0 +1,3099 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/windows-exe/WindowsSetup/WindowsSetup/LibFileList.wxs b/windows-exe/WindowsSetup/WindowsSetup/LibFileList.wxs new file mode 100644 index 000000000..d83141bce --- /dev/null +++ b/windows-exe/WindowsSetup/WindowsSetup/LibFileList.wxs @@ -0,0 +1,527 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/windows-exe/WindowsSetup/WindowsSetup/Microsoft_VC141_CRT_x64.msm b/windows-exe/WindowsSetup/WindowsSetup/Microsoft_VC141_CRT_x64.msm new file mode 100644 index 000000000..6f8006e65 Binary files /dev/null and b/windows-exe/WindowsSetup/WindowsSetup/Microsoft_VC141_CRT_x64.msm differ diff --git a/windows-exe/WindowsSetup/WindowsSetup/Product.wxs b/windows-exe/WindowsSetup/WindowsSetup/Product.wxs new file mode 100644 index 000000000..3a12d17bb --- /dev/null +++ b/windows-exe/WindowsSetup/WindowsSetup/Product.wxs @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/windows-exe/WindowsSetup/WindowsSetup/sdfs.wixproj b/windows-exe/WindowsSetup/WindowsSetup/sdfs.wixproj new file mode 100644 index 000000000..463c41930 --- /dev/null +++ b/windows-exe/WindowsSetup/WindowsSetup/sdfs.wixproj @@ -0,0 +1,64 @@ + + + + Debug + x86 + 3.10 + 01d7f052-621c-4dd9-aa75-d2ec9f055891 + 2.0 + SdfsSetup + Package + sdfs + + + bin\$(Configuration)\ + obj\$(Configuration)\ + Debug + + + bin\$(Configuration)\ + obj\$(Configuration)\ + + + Debug + bin\$(Platform)\$(Configuration)\ + SdfsInstaller (x64-Debug) + obj\$(Platform)\$(Configuration)\ + -arch x64 + + + bin\$(Platform)\$(Configuration)\ + SdfsInstaller + obj\$(Platform)\$(Configuration)\ + -arch x64 + + + x64 + + + + + + + + + + + + + BasePath=..\..\..\install-packages\windows\;LibPath=..\..\..\target\lib\ + + + + + + + + \ No newline at end of file diff --git a/windows-exe/mksdfs/mksdfs.cpp b/windows-exe/mksdfs/mksdfs.cpp index 81f97cdbf..da0eab03f 100644 --- a/windows-exe/mksdfs/mksdfs.cpp +++ b/windows-exe/mksdfs/mksdfs.cpp @@ -83,7 +83,7 @@ int _tmain(int argc, TCHAR *argv[]) // Create the child process. TCHAR cmd[4096]; - TCHAR *val = ReadRegValue(HKEY_LOCAL_MACHINE, "SOFTWARE\\WOW6432Node\\SDFS", "path"); + TCHAR *val = ReadRegValue(HKEY_LOCAL_MACHINE, "SOFTWARE\\SDFS", "path"); TCHAR path[1024]; _tcscpy_s(path, val); _tcscpy_s(cmd, val); diff --git a/windows-exe/mountsdfs/mountsdfs.cpp b/windows-exe/mountsdfs/mountsdfs.cpp index c3fa1abe7..863dbddd2 100644 --- a/windows-exe/mountsdfs/mountsdfs.cpp +++ b/windows-exe/mountsdfs/mountsdfs.cpp @@ -2,9 +2,9 @@ // #include "stdafx.h" -#include +#include #include -#include +#include #include #include #include @@ -18,7 +18,7 @@ #include #include -#define BUFSIZE 8192 +#define BUFSIZE 8192 HANDLE g_hChildStd_IN_Rd = NULL; HANDLE g_hChildStd_IN_Wr = NULL; @@ -75,8 +75,8 @@ void signalHandler(int signum) { //TerminateProcess(piProcInfo.hProcess, 0); //WaitForSingleObject(piProcInfo.hProcess, INFINITE); - // cleanup and close up stuff here - // terminate program + // cleanup and close up stuff here + // terminate program } @@ -88,13 +88,13 @@ int _tmain(int argc, TCHAR* argv[]) //printf("\n->Start of parent execution.\n"); - // Set the bInheritHandle flag so pipe handles are inherited. + // Set the bInheritHandle flag so pipe handles are inherited. saAttr.nLength = sizeof(SECURITY_ATTRIBUTES); saAttr.bInheritHandle = TRUE; saAttr.lpSecurityDescriptor = NULL; - // Create a pipe for the child process's STDOUT. + // Create a pipe for the child process's STDOUT. if (!CreatePipe(&g_hChildStd_OUT_Rd, &g_hChildStd_OUT_Wr, &saAttr, 0)) ErrorExit(TEXT("StdoutRd CreatePipe")); @@ -104,17 +104,17 @@ int _tmain(int argc, TCHAR* argv[]) if (!SetHandleInformation(g_hChildStd_OUT_Rd, HANDLE_FLAG_INHERIT, 0)) ErrorExit(TEXT("Stdout SetHandleInformation")); - // Create a pipe for the child process's STDIN. + // Create a pipe for the child process's STDIN. if (!CreatePipe(&g_hChildStd_IN_Rd, &g_hChildStd_IN_Wr, &saAttr, 0)) ErrorExit(TEXT("Stdin CreatePipe")); - // Ensure the write handle to the pipe for STDIN is not inherited. + // Ensure the write handle to the pipe for STDIN is not inherited. if (!SetHandleInformation(g_hChildStd_IN_Wr, HANDLE_FLAG_INHERIT, 0)) ErrorExit(TEXT("Stdin SetHandleInformation")); TCHAR cmd[2048]; - TCHAR* val = ReadRegValue(HKEY_LOCAL_MACHINE, "SOFTWARE\\WOW6432Node\\SDFS", "path"); + TCHAR* val = ReadRegValue(HKEY_LOCAL_MACHINE, "SOFTWARE\\SDFS", "path"); TCHAR path[512]; _tcscpy_s(path, val); @@ -123,7 +123,7 @@ int _tmain(int argc, TCHAR* argv[]) TCHAR configFile[512]; __int64 mem = 256; - __int64 basemem = 3000; + __int64 basemem = 6000; for (int i = 1; i < argc; i++) { if (!_tcsncmp(argv[i], _T("-mem"), 4)) { mem = _ttoi(argv[i + 1]); @@ -279,8 +279,8 @@ int _tmain(int argc, TCHAR* argv[]) } - // The remaining open handles are cleaned up when this process terminates. - // To avoid resource leaks in a larger application, close handles explicitly. + // The remaining open handles are cleaned up when this process terminates. + // To avoid resource leaks in a larger application, close handles explicitly. return exit_code; } @@ -291,11 +291,11 @@ void CreateChildProcess(TCHAR* p) BOOL bSuccess = FALSE; - // Set up members of the PROCESS_INFORMATION structure. + // Set up members of the PROCESS_INFORMATION structure. ZeroMemory(&piProcInfo, sizeof(PROCESS_INFORMATION)); - // Set up members of the STARTUPINFO structure. + // Set up members of the STARTUPINFO structure. // This structure specifies the STDIN and STDOUT handles for redirection. ZeroMemory(&siStartInfo, sizeof(STARTUPINFO)); @@ -305,30 +305,30 @@ void CreateChildProcess(TCHAR* p) siStartInfo.hStdInput = g_hChildStd_IN_Rd; siStartInfo.dwFlags |= STARTF_USESTDHANDLES; - // Create the child process. + // Create the child process. DWORD dp = DETACHED_PROCESS; if (cpt) dp = 0; bSuccess = CreateProcess(NULL, - p, // command line - NULL, // process security attributes - NULL, // primary thread security attributes - TRUE, // handles are inherited - dp, // creation flags - NULL, // use parent's environment - NULL, // use parent's current directory - &siStartInfo, // STARTUPINFO pointer - &piProcInfo); // receives PROCESS_INFORMATION - - // If an error occurs, exit the application. + p, // command line + NULL, // process security attributes + NULL, // primary thread security attributes + TRUE, // handles are inherited + dp, // creation flags + NULL, // use parent's environment + NULL, // use parent's current directory + &siStartInfo, // STARTUPINFO pointer + &piProcInfo); // receives PROCESS_INFORMATION + + // If an error occurs, exit the application. if (!bSuccess) ErrorExit(TEXT("CreateProcess")); else { // Close handles to the child process and its primary thread. // Some applications might keep these handles to monitor the status - // of the child process, for example. + // of the child process, for example. //CloseHandle(piProcInfo.hProcess); //CloseHandle(piProcInfo.hThread); @@ -338,8 +338,8 @@ void CreateChildProcess(TCHAR* p) void ReadFromPipe(void* param) // Read output from the child process's pipe for STDOUT -// and write to the parent process's pipe for STDOUT. -// Stop when there is no more data. +// and write to the parent process's pipe for STDOUT. +// Stop when there is no more data. { DWORD dwRead, dwWritten; CHAR chBuf[BUFSIZE]; @@ -381,7 +381,7 @@ void ReadFromPipe(void* param) void ErrorExit(PTSTR lpszFunction) -// Format a readable error message, display a message box, +// Format a readable error message, display a message box, // and exit from the application. { diff --git a/windows-exe/mountsdfs/startsdfs.cpp b/windows-exe/mountsdfs/startsdfs.cpp index 5b55cc64d..afc4226e9 100644 --- a/windows-exe/mountsdfs/startsdfs.cpp +++ b/windows-exe/mountsdfs/startsdfs.cpp @@ -115,7 +115,7 @@ int _tmain(int argc, TCHAR *argv[]) if (!SetHandleInformation(g_hChildStd_IN_Wr, HANDLE_FLAG_INHERIT, 0)) ErrorExit(TEXT("Stdin SetHandleInformation")); TCHAR cmd[2048]; - TCHAR *val = ReadRegValue(HKEY_LOCAL_MACHINE, "SOFTWARE\\WOW6432Node\\SDFS", "path"); + TCHAR *val = ReadRegValue(HKEY_LOCAL_MACHINE, "SOFTWARE\\SDFS", "path"); TCHAR path[512]; _tcscpy_s(path, val); @@ -124,7 +124,8 @@ int _tmain(int argc, TCHAR *argv[]) TCHAR configFile[512]; __int64 mem = 256; - __int64 basemem = 3000; + + __int64 basemem = 6000; for (int i = 1; i < argc; i++) { if (!_tcsncmp(argv[i], _T("-z"), 4)) { mem = _ttoi(argv[i + 1]); diff --git a/windows-exe/sdfs-proxy-d/sdfs-proxy-d.cpp b/windows-exe/sdfs-proxy-d/sdfs-proxy-d.cpp index 51925e8ae..1c0ec2028 100644 --- a/windows-exe/sdfs-proxy-d/sdfs-proxy-d.cpp +++ b/windows-exe/sdfs-proxy-d/sdfs-proxy-d.cpp @@ -113,7 +113,7 @@ int _tmain(int argc, TCHAR* argv[]) if (!SetHandleInformation(g_hChildStd_IN_Wr, HANDLE_FLAG_INHERIT, 0)) ErrorExit(TEXT("Stdin SetHandleInformation")); TCHAR cmd[2048]; - TCHAR* val = ReadRegValue(HKEY_LOCAL_MACHINE, "SOFTWARE\\WOW6432Node\\SDFS", "path"); + TCHAR* val = ReadRegValue(HKEY_LOCAL_MACHINE, "SOFTWARE\\SDFS", "path"); TCHAR path[512]; _tcscpy_s(path, val);