Skip to content

Commit bc2fdfb

Browse files
authored
Merge pull request #430 from rpmoore/3_2_9_release_prep
3 2 9 release prep
2 parents 22ab20f + 8261ff1 commit bc2fdfb

File tree

21 files changed

+273
-195
lines changed

21 files changed

+273
-195
lines changed

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ jdk:
33
- oraclejdk8
44
- oraclejdk7
55
- openjdk7
6-
script: ./gradlew -S clean jar ds3-sdk:test
6+
script: ./gradlew -S clean jar ds3-sdk:test ds3-utils:test ds3-metadata:test

build.gradle

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
allprojects {
1717
group = 'com.spectralogic.ds3'
18-
version = '3.2.9-RC2'
18+
version = '3.2.9'
1919
}
2020

2121
subprojects {
@@ -30,18 +30,18 @@ subprojects {
3030
}
3131

3232
dependencies {
33-
compile 'org.slf4j:slf4j-api:1.7.20'
33+
compile 'org.slf4j:slf4j-api:1.7.22'
3434
testCompile ('org.mockito:mockito-core:1.10.19') {
3535
exclude group: 'org.hamcrest'
3636
}
3737

3838
testCompile 'junit:junit:4.12'
39-
testCompile 'org.slf4j:slf4j-simple:1.7.20'
39+
testCompile 'org.slf4j:slf4j-simple:1.7.22'
4040
}
4141
}
4242

4343
task wrapper(type: Wrapper) {
44-
gradleVersion = '3.2'
44+
gradleVersion = '3.3'
4545
}
4646

4747
project(':ds3-sdk') {

ds3-interfaces/build.gradle

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
buildscript {
2+
repositories { jcenter() }
3+
dependencies {
4+
classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.3'
5+
}
6+
}
7+
8+
apply plugin: 'com.github.johnrengelman.shadow'
9+
10+
shadowJar {
11+
dependencies {
12+
exclude(dependency('org.hamcrest:hamcrest-library:1.3'))
13+
exclude(dependency('org.mockito:mockito-core:1.10.19'))
14+
exclude(dependency('junit:junit:4.12'))
15+
exclude(dependency('org.slf4j:slf4j-api:1.7.22'))
16+
exclude(dependency('org.slf4j:slf4j-simple:1.7.22'))
17+
}
18+
}
19+
20+
artifacts {
21+
archives shadowJar
22+
}

ds3-metadata/build.gradle

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,39 @@
1313
* ****************************************************************************
1414
*/
1515

16+
buildscript {
17+
repositories { jcenter() }
18+
dependencies {
19+
classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.3'
20+
}
21+
}
22+
23+
apply plugin: 'com.github.johnrengelman.shadow'
24+
25+
shadowJar {
26+
relocate 'org.apache', 'ds3metafatjar.org.apache'
27+
relocate 'com.google', 'ds3metafatjar.com.google'
28+
relocate 'com.sun.jna', 'ds3metafatjar.net.java.dev.jna'
29+
30+
dependencies {
31+
exclude(dependency('org.hamcrest:hamcrest-library:1.3'))
32+
exclude(dependency('org.mockito:mockito-core:1.10.19'))
33+
exclude(dependency('junit:junit:4.12'))
34+
exclude(dependency('org.slf4j:slf4j-api:1.7.22'))
35+
exclude(dependency('org.slf4j:slf4j-simple:1.7.22'))
36+
exclude(dependency('org.apache.commons:commons-lang3:3.0'))
37+
}
38+
}
39+
40+
artifacts {
41+
archives shadowJar
42+
}
43+
1644
dependencies {
17-
testCompile group: 'org.apache.commons', name: 'commons-lang3', version: '3.0'
1845
compile group: 'net.java.dev.jna', name: 'jna-platform', version: '4.2.2'
1946
compile group: 'net.java.dev.jna', name: 'jna', version: '4.2.2'
2047
compile 'commons-io:commons-io:2.4'
2148
compile 'org.apache.httpcomponents:httpclient:4.5.1'
22-
}
2349

50+
testCompile group: 'org.apache.commons', name: 'commons-lang3', version: '3.0'
51+
}

ds3-metadata/src/main/java/com/spectralogic/ds3client/metadata/MetadataAccessImpl.java

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public MetadataAccessImpl(final ImmutableMap<String, Path> fileMapper) {
4343
public Map<String, String> getMetadataValue(final String filename) {
4444
final Path file = fileMapper.get(filename);
4545
try {
46-
return storeMetaData(file).build();
46+
return storeMetaData(file);
4747
} catch (final IOException e) {
4848
throw new RuntimeException("Error recording metadata.", e);
4949
}
@@ -53,33 +53,32 @@ public Map<String, String> getMetadataValue(final String filename) {
5353
* @param file local path of file
5454
* @return map builder containing the data to be stored on server
5555
*/
56-
private ImmutableMap.Builder<String, String> storeMetaData(final Path file) throws IOException {
57-
final ImmutableMap.Builder<String, String> metadata = new ImmutableMap.Builder<>();
58-
new ImmutableMap.Builder<String, String>();
56+
private ImmutableMap<String, String> storeMetaData(final Path file) throws IOException {
57+
final ImmutableMap.Builder<String, String> builder = ImmutableMap.builder();
5958

60-
//get metadata store based on os type
61-
final MetadataStore metadataStore = new MetadataStoreFactory().getOsSpecificMetadataStore(metadata);
62-
metadataStore.saveOSMetaData(MetaDataUtil.getOS());
59+
//get metadata store based on os type
60+
final MetadataStore metadataStore = new MetadataStoreFactory().getOsSpecificMetadataStore(builder);
61+
metadataStore.saveOSMetaData(MetaDataUtil.getOS());
6362

64-
final BasicFileAttributes attr = Files.readAttributes(file, BasicFileAttributes.class);
63+
final BasicFileAttributes attr = Files.readAttributes(file, BasicFileAttributes.class);
6564

66-
PosixFileAttributes attrPosix = null;
65+
PosixFileAttributes attrPosix = null;
6766

68-
if ( !Platform.isWindows()) {
69-
attrPosix = Files.readAttributes(file, PosixFileAttributes.class);
70-
}
67+
if (!Platform.isWindows()) {
68+
attrPosix = Files.readAttributes(file, PosixFileAttributes.class);
69+
}
7170

72-
metadataStore.saveCreationTimeMetaData(attr);
73-
metadataStore.saveAccessTimeMetaData(attr);
74-
metadataStore.saveLastModifiedTime(attr);
71+
metadataStore.saveCreationTimeMetaData(attr);
72+
metadataStore.saveAccessTimeMetaData(attr);
73+
metadataStore.saveLastModifiedTime(attr);
7574

76-
if(attrPosix != null) {
77-
metadataStore.saveOSSpecificMetadata(file, attrPosix);
78-
} else {
79-
metadataStore.saveOSSpecificMetadata(file, attr);
80-
}
75+
if (attrPosix != null) {
76+
metadataStore.saveOSSpecificMetadata(file, attrPosix);
77+
} else {
78+
metadataStore.saveOSSpecificMetadata(file, attr);
79+
}
8180

82-
return metadata;
81+
return builder.build();
8382
}
8483

8584
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
* ****************************************************************************
3+
* Copyright 2014-2016 Spectra Logic Corporation. All Rights Reserved.
4+
* Licensed under the Apache License, Version 2.0 (the "License"). You may not use
5+
* this file except in compliance with the License. A copy of the License is located at
6+
*
7+
* http://www.apache.org/licenses/LICENSE-2.0
8+
*
9+
* or in the "license" file accompanying this file.
10+
* This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
11+
* CONDITIONS OF ANY KIND, either express or implied. See the License for the
12+
* specific language governing permissions and limitations under the License.
13+
* ****************************************************************************
14+
*/
15+
16+
package com.spectralogic.ds3client.metadata;
17+
18+
public final class PermissionsUtils {
19+
private PermissionsUtils() {}
20+
// get the octal number for the permission
21+
public static String getPermissionInOctal(final String permString) {
22+
String permissions = permString;
23+
permissions = permissions.replaceAll("r", "4");
24+
permissions = permissions.replaceAll("w", "2");
25+
permissions = permissions.replaceAll("x", "1");
26+
permissions = permissions.replaceAll("-", "0");
27+
final String ownerPerm = String.valueOf(Integer.parseInt(String.valueOf(permissions.charAt(0))) + Integer.parseInt(String.valueOf(permissions.charAt(1))) + Integer.parseInt(String.valueOf(permissions.charAt(2))));
28+
final String groupPerm = String.valueOf(Integer.parseInt(String.valueOf(permissions.charAt(3))) + Integer.parseInt(String.valueOf(permissions.charAt(4))) + Integer.parseInt(String.valueOf(permissions.charAt(5))));
29+
final String otherPerm = String.valueOf(Integer.parseInt(String.valueOf(permissions.charAt(6))) + Integer.parseInt(String.valueOf(permissions.charAt(7))) + Integer.parseInt(String.valueOf(permissions.charAt(8))));
30+
final String totalPerm = ownerPerm + groupPerm + otherPerm;
31+
return totalPerm + "(" + permString + ")";
32+
}
33+
}

ds3-metadata/src/main/java/com/spectralogic/ds3client/metadata/PosixMetadataStore.java

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import static com.spectralogic.ds3client.metadata.MetadataKeyConstants.KEY_UID;
3131
import static com.spectralogic.ds3client.metadata.MetadataKeyConstants.METADATA_PREFIX;
3232

33+
import static com.spectralogic.ds3client.metadata.PermissionsUtils.getPermissionInOctal;
3334
import static java.nio.file.LinkOption.NOFOLLOW_LINKS;
3435

3536
class PosixMetadataStore extends AbstractMetadataStore {
@@ -100,36 +101,21 @@ private String saveGroupNameMetaData(final PosixFileAttributes attr) {
100101
* @param attr PosixFileAttributes to get posix info
101102
* @return file permissions in octal
102103
*/
103-
private String savePosixPermssionsMeta(final PosixFileAttributes attr) {
104-
String permissionsOctal = null;
105-
106-
permissionsOctal = getPermissionInOctal(PosixFilePermissions.toString(attr.permissions()));
104+
private String savePosixPermissionsMeta(final PosixFileAttributes attr) {
105+
final String permissionsOctal = getPermissionInOctal(PosixFilePermissions.toString(attr.permissions()));
107106
metadataMap.put(METADATA_PREFIX + KEY_PERMISSION, permissionsOctal);
108107

109108
return permissionsOctal;
110109
}
111110

112-
// get the octal number for the permission
113-
private String getPermissionInOctal(String permissions) {
114-
final String permString = new String(permissions);
115-
permissions = permissions.replaceAll("r", "4");
116-
permissions = permissions.replaceAll("w", "2");
117-
permissions = permissions.replaceAll("x", "1");
118-
permissions = permissions.replaceAll("-", "0");
119-
final String ownerPerm = String.valueOf(Integer.parseInt(String.valueOf(permissions.charAt(0))) + Integer.parseInt(String.valueOf(permissions.charAt(1))) + Integer.parseInt(String.valueOf(permissions.charAt(2))));
120-
final String groupPerm = String.valueOf(Integer.parseInt(String.valueOf(permissions.charAt(3))) + Integer.parseInt(String.valueOf(permissions.charAt(4))) + Integer.parseInt(String.valueOf(permissions.charAt(5))));
121-
final String otherPerm = String.valueOf(Integer.parseInt(String.valueOf(permissions.charAt(6))) + Integer.parseInt(String.valueOf(permissions.charAt(7))) + Integer.parseInt(String.valueOf(permissions.charAt(8))));
122-
final String totalPerm = ownerPerm + groupPerm + otherPerm;
123-
return totalPerm + "(" + permString + ")";
124-
}
125111

126112
@Override
127113
public void saveOSSpecificMetadata(final Path file,final BasicFileAttributes attrs) throws IOException {
128114
saveUserId(file);
129115
saveGroupId(file);
130116
saveModeMetaData(file);
131-
saveOwnerNameMetaData((PosixFileAttributes) (attrs));
132-
saveGroupNameMetaData((PosixFileAttributes) (attrs));
133-
savePosixPermssionsMeta((PosixFileAttributes) (attrs));
117+
saveOwnerNameMetaData((PosixFileAttributes) attrs);
118+
saveGroupNameMetaData((PosixFileAttributes) attrs);
119+
savePosixPermissionsMeta((PosixFileAttributes) attrs);
134120
}
135121
}

ds3-metadata/src/main/java/com/spectralogic/ds3client/metadata/WindowsMetadataStore.java

Lines changed: 45 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,17 @@
1717

1818
import com.google.common.collect.ImmutableMap;
1919
import com.spectralogic.ds3client.metadata.jna.Advapi32;
20+
import com.spectralogic.ds3client.utils.Guard;
2021
import com.sun.jna.platform.win32.WinNT;
2122
import com.sun.jna.ptr.PointerByReference;
23+
import org.slf4j.Logger;
24+
import org.slf4j.LoggerFactory;
2225

2326
import java.io.BufferedReader;
2427
import java.io.File;
2528
import java.io.IOException;
2629
import java.io.InputStreamReader;
30+
import java.nio.charset.Charset;
2731
import java.nio.file.Files;
2832
import java.nio.file.Path;
2933
import java.nio.file.attribute.AclEntry;
@@ -39,6 +43,9 @@
3943
import static com.spectralogic.ds3client.metadata.MetadataKeyConstants.METADATA_PREFIX;
4044

4145
class WindowsMetadataStore extends AbstractMetadataStore {
46+
47+
private final static Logger LOG = LoggerFactory.getLogger(WindowsMetadataStore.class);
48+
4249
public WindowsMetadataStore(final ImmutableMap.Builder<String, String> metadataMap) {
4350
this.metadataMap = metadataMap;
4451
}
@@ -90,22 +97,21 @@ private void saveWindowsDescriptors(final Path path) throws IOException {
9097
*/
9198
private String getDaclString(final WinNT.ACL acl) {
9299
final WinNT.ACCESS_ACEStructure[] aceStructures = acl.getACEStructures();
93-
String daclString = "";
94-
for (int i = 0; i < aceStructures.length; i++) {
95-
daclString = daclString + "(";
96-
final WinNT.ACCESS_ACEStructure aceStructure = aceStructures[i];
100+
final StringBuilder daclStringBuffer = new StringBuilder();
101+
for (final WinNT.ACCESS_ACEStructure aceStructure : aceStructures) {
102+
daclStringBuffer.append("(");
97103
if (aceStructure.AceType == 0) {
98-
daclString = daclString + "A;";
104+
daclStringBuffer.append("A;");
99105
} else if (aceStructure.AceType == 1) {
100-
daclString = daclString + "D;";
106+
daclStringBuffer.append("D;");
101107
} else if (aceStructure.AceType == 2) {
102-
daclString = daclString + "AU;";
108+
daclStringBuffer.append("AU;");
103109
}
104-
daclString = daclString + "0x" + Integer.toHexString(aceStructure.AceFlags) + ";";
105-
daclString = daclString + "0x" + Integer.toHexString(aceStructure.Mask) + ";;;";
106-
daclString = daclString + (aceStructure.getSidString()) + ")";
110+
daclStringBuffer.append("0x").append(Integer.toHexString(aceStructure.AceFlags)).append(";");
111+
daclStringBuffer.append("0x").append(Integer.toHexString(aceStructure.Mask)).append(";;;");
112+
daclStringBuffer.append(aceStructure.getSidString()).append(")");
107113
}
108-
return daclString;
114+
return daclStringBuffer.toString();
109115
}
110116

111117
/**
@@ -119,24 +125,29 @@ private String saveFlagMetaData(final Path file) throws IOException {
119125

120126
final ProcessBuilder processBuilder = new ProcessBuilder("attrib", file.toString());
121127
final Process process = processBuilder.start();
122-
final BufferedReader reader =
123-
new BufferedReader(new InputStreamReader(process.getInputStream()));
124-
final String flagWindows = reader.readLine();
125-
final String[] flags = flagWindows.split(" ");
126-
for (int i = 0; i < flags.length - 1; i++) {
127-
if (!flags[i].equals("")) {
128-
if (flags[i].contains("\\")) {
129-
break;
130-
} else {
131-
flagBuilder.append(flags[i].trim());
128+
try (final BufferedReader reader =
129+
new BufferedReader(new InputStreamReader(process.getInputStream(), Charset.forName("UTF-8")))) {
130+
final String flagWindows = reader.readLine();
131+
if (Guard.isStringNullOrEmpty(flagWindows)) {
132+
LOG.error("The flagWindows string was null");
133+
} else {
134+
final String[] flags = flagWindows.split(" ");
135+
for (int i = 0; i < flags.length - 1; i++) {
136+
final String flag = flags[i];
137+
if (!flag.isEmpty()) {
138+
if (flag.contains("\\")) {
139+
break;
140+
} else {
141+
flagBuilder.append(flag.trim());
142+
}
143+
}
132144
}
145+
if (flagBuilder.toString().equals("")) {
146+
flagBuilder.append("N");
147+
}
148+
metadataMap.put(METADATA_PREFIX + KEY_FLAGS, flagBuilder.toString());
133149
}
134150
}
135-
if (flagBuilder.toString().equals("")) {
136-
flagBuilder.append("N");
137-
}
138-
metadataMap.put(METADATA_PREFIX + KEY_FLAGS, flagBuilder.toString());
139-
140151
return flagBuilder.toString();
141152
}
142153

@@ -168,28 +179,28 @@ private void saveWindowsfilePermissions(final Path file) throws IOException {
168179
}
169180
stringSetMap.put(userDisplay, newSet);
170181
}
171-
final Set<String> keys = stringSetMap.keySet();
172-
Set<Integer> ordinals;
182+
final int setSize = stringSetMap.size();
173183
int userCount = 1;
174-
for (final String key : keys) {
184+
for (final Map.Entry<String, Set<Integer>> entry: stringSetMap.entrySet()) {
175185
int index = 1;
176-
ordinals = stringSetMap.get(key);
186+
final Set<Integer> ordinals = entry.getValue();
187+
final String key = entry.getKey();
177188
userType = key.replaceAll(" ", "").toLowerCase();
178189
permission = new StringBuilder();
179190
for (final int ord : ordinals) {
180191
if (ordinals.size() == index) {
181192
permission.append(ord);
182193
} else {
183-
permission.append(ord + "-");
194+
permission.append(ord).append("-");
184195
}
185196
index++;
186197
}
187-
if (keys.size() == userCount) {
198+
if (setSize == userCount) {
188199
userDisplayList.append(key);
189200
userList.append(userType);
190201
} else {
191-
userDisplayList.append(key + "-");
192-
userList.append(userType + "-");
202+
userDisplayList.append(key).append("-");
203+
userList.append(userType).append("-");
193204
}
194205
metadataMap.put("x-amz-meta-ds3-" + userType, permission.toString());
195206
userCount++;

0 commit comments

Comments
 (0)