Skip to content

Commit e128322

Browse files
authored
Merge pull request #82 from RADAR-base/release-1.1.3
Release 1.1.3
2 parents f7c59bc + 030747b commit e128322

24 files changed

+394
-206
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ When upgrading to version 0.6.0 from version 0.5.x or earlier, please follow the
6161

6262
This package is available as docker image [`radarbase/radar-output-restructure`](https://hub.docker.com/r/radarbase/radar-output-restructure). The entrypoint of the image is the current application. So in all the commands listed in usage, replace `radar-output-restructure` with for example:
6363
```shell
64-
docker run --rm -t --network hadoop -v "$PWD/output:/output" radarbase/radar-output-restructure:1.1.2-hdfs -n hdfs-namenode -o /output /myTopic
64+
docker run --rm -t --network hadoop -v "$PWD/output:/output" radarbase/radar-output-restructure:1.1.3-hdfs -n hdfs-namenode -o /output /myTopic
6565
```
6666
if your docker cluster is running in the `hadoop` network and your output directory should be `./output`.
6767

@@ -171,7 +171,7 @@ This package requires at least Java JDK 8. Build the distribution with
171171
and install the package into `/usr/local` with for example
172172
```shell
173173
sudo mkdir -p /usr/local
174-
sudo tar -xzf build/distributions/radar-output-restructure-1.1.2.tar.gz -C /usr/local --strip-components=1
174+
sudo tar -xzf build/distributions/radar-output-restructure-1.1.3.tar.gz -C /usr/local --strip-components=1
175175
```
176176

177177
Now the `radar-output-restructure` command should be available.

build.gradle

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ plugins {
99
}
1010

1111
group 'org.radarbase'
12-
version '1.1.2'
12+
version '1.1.3'
1313
mainClassName = 'org.radarbase.output.Application'
1414

1515
sourceCompatibility = '1.8'
@@ -28,7 +28,7 @@ ext {
2828
jCommanderVersion = '1.78'
2929
almworksVersion = '1.1.1'
3030
junitVersion = '5.6.1'
31-
minioVersion = '7.0.1'
31+
minioVersion = '7.1.0'
3232
jedisVersion = '3.2.0'
3333
azureStorageVersion = '12.6.0'
3434
}
@@ -88,6 +88,11 @@ compileTestKotlin {
8888
jvmTarget = "1.8"
8989
}
9090
}
91+
compileIntegrationTestKotlin {
92+
kotlinOptions {
93+
jvmTarget = "1.8"
94+
}
95+
}
9196

9297
ext.sharedManifest = manifest {
9398
attributes(

restructure.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ source:
1313
bucket: radar
1414
accessToken: minioadmin
1515
secretKey: minioadmin
16+
# If true, try to read the metadata property "endOffset" to determine the
17+
# final offset of an input object.
18+
#endOffsetFromTags: false
1619
azure:
1720
endpoint: https://MyBlobStorageAccount.blob.core.windows.net
1821
# when using personal login
@@ -25,6 +28,9 @@ source:
2528
#sasToken: MyLongToken
2629
# if no credentials are supplied, this only works with a publicly writable blob storage
2730
container: MySourceContainer
31+
# If true, try to read the metadata property "endOffset" to determine the
32+
# final offset of an input object.
33+
#endOffsetFromMetadata: false
2834
# only actually needed if source type is hdfs
2935
hdfs:
3036
nameNodes: [hdfs-namenode-1, hdfs-namenode-2]

src/integrationTest/java/org/radarbase/output/RestructureS3IntegrationTest.kt

Lines changed: 30 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package org.radarbase.output
22

3-
import io.minio.PutObjectOptions
3+
import io.minio.*
44
import io.minio.PutObjectOptions.MAX_PART_SIZE
55
import org.junit.jupiter.api.Assertions.assertEquals
66
import org.junit.jupiter.api.Test
77
import org.radarbase.output.config.*
88
import org.radarbase.output.util.Timer
9+
import org.radarbase.output.util.bucketBuild
10+
import org.radarbase.output.util.objectBuild
911
import java.nio.charset.StandardCharsets.UTF_8
1012
import java.nio.file.Paths
1113

@@ -31,8 +33,8 @@ class RestructureS3IntegrationTest {
3133
)
3234
val application = Application(config)
3335
val sourceClient = sourceConfig.createS3Client()
34-
if (!sourceClient.bucketExists(sourceConfig.bucket)) {
35-
sourceClient.makeBucket(sourceConfig.bucket)
36+
if (!sourceClient.bucketExists(BucketExistsArgs.Builder().bucketBuild(sourceConfig.bucket))) {
37+
sourceClient.makeBucket(MakeBucketArgs.Builder().bucketBuild(sourceConfig.bucket))
3638
}
3739

3840
val resourceFiles = listOf(
@@ -43,18 +45,24 @@ class RestructureS3IntegrationTest {
4345
val targetFiles = resourceFiles.map { Paths.get("in/$it") }
4446
resourceFiles.forEachIndexed { i, resourceFile ->
4547
javaClass.getResourceAsStream("/$resourceFile").use { statusFile ->
46-
sourceClient.putObject(sourceConfig.bucket, targetFiles[i].toString(), statusFile, PutObjectOptions(-1, MAX_PART_SIZE))
48+
sourceClient.putObject(PutObjectArgs.Builder().objectBuild(sourceConfig.bucket, targetFiles[i]) {
49+
stream(statusFile, -1, MAX_PART_SIZE)
50+
})
4751
}
4852
}
4953

5054
application.start()
5155

5256
val targetClient = targetConfig.createS3Client()
53-
val files = targetClient.listObjects(targetConfig.bucket, "output")
57+
val files = targetClient.listObjects(ListObjectsArgs.Builder().bucketBuild(targetConfig.bucket) {
58+
prefix("output")
59+
recursive(true)
60+
useUrlEncodingType(false)
61+
})
5462
.map { it.get().objectName() }
5563
.toList()
5664

57-
application.redisPool.resource.use { redis ->
65+
application.redisHolder.execute { redis ->
5866
assertEquals(1L, redis.del("offsets/application_server_status.json"))
5967
assertEquals(1L, redis.del("offsets/android_phone_acceleration.json"))
6068
}
@@ -70,26 +78,36 @@ class RestructureS3IntegrationTest {
7078
"$secondParticipantOutput/schema-android_phone_acceleration.json"),
7179
files)
7280

73-
println(targetClient.getObject(targetConfig.bucket, "$firstParticipantOutput/20200128_1300.csv").readBytes().toString(UTF_8))
81+
println(targetClient.getObject(GetObjectArgs.builder()
82+
.bucketBuild(targetConfig.bucket) {
83+
`object`("$firstParticipantOutput/20200128_1300.csv")
84+
}
85+
).readBytes().toString(UTF_8))
7486

7587
val csvContents = """
7688
key.projectId,key.userId,key.sourceId,value.time,value.serverStatus,value.ipAddress
7789
STAGING_PROJECT,1543bc93-3c17-4381-89a5-c5d6272b827c,99caf236-bbe6-4eed-9c63-fba77349821d,1.58021982003E9,CONNECTED,
7890
STAGING_PROJECT,1543bc93-3c17-4381-89a5-c5d6272b827c,99caf236-bbe6-4eed-9c63-fba77349821d,1.58021982003E9,CONNECTED,
7991
8092
""".trimIndent()
81-
assertEquals(csvContents, targetClient.getObject(targetConfig.bucket, "$firstParticipantOutput/20200128_1300.csv")
93+
assertEquals(csvContents, targetClient.getObject(GetObjectArgs.Builder()
94+
.bucketBuild(targetConfig.bucket) {
95+
`object`("$firstParticipantOutput/20200128_1300.csv")
96+
})
8297
.readBytes()
8398
.toString(UTF_8))
8499

85100
targetFiles.forEach {
86-
sourceClient.removeObject(sourceConfig.bucket, it.toString())
101+
sourceClient.removeObject(RemoveObjectArgs.Builder()
102+
.objectBuild(sourceConfig.bucket, it))
87103
}
88-
sourceClient.removeBucket(sourceConfig.bucket)
104+
sourceClient.removeBucket(RemoveBucketArgs.Builder().bucketBuild(sourceConfig.bucket))
89105
files.forEach {
90-
targetClient.removeObject(targetConfig.bucket, it)
106+
targetClient.removeObject(RemoveObjectArgs.Builder().bucketBuild(targetConfig.bucket) {
107+
`object`(it)
108+
})
91109
}
92-
targetClient.removeBucket(targetConfig.bucket)
110+
targetClient.removeBucket(RemoveBucketArgs.Builder().bucketBuild(targetConfig.bucket))
93111

94112
println(Timer)
95113
}

src/integrationTest/java/org/radarbase/output/accounting/OffsetRangeRedisTest.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,21 @@ import java.time.Instant
1313

1414
class OffsetRangeRedisTest {
1515
private lateinit var testFile: Path
16-
private lateinit var redisPool: JedisPool
16+
private lateinit var redisHolder: RedisHolder
1717
private lateinit var offsetPersistence: OffsetPersistenceFactory
1818
private val lastModified = Instant.now()
1919

2020
@BeforeEach
2121
@Throws(IOException::class)
2222
fun setUp() {
2323
testFile = Paths.get("test/topic")
24-
redisPool = JedisPool()
25-
offsetPersistence = OffsetRedisPersistence(redisPool)
24+
redisHolder = RedisHolder(JedisPool())
25+
offsetPersistence = OffsetRedisPersistence(redisHolder)
2626
}
2727

2828
@AfterEach
2929
fun tearDown() {
30-
redisPool.resource.use { it.del(testFile.toString()) }
30+
redisHolder.execute { it.del(testFile.toString()) }
3131
}
3232

3333
@Test
@@ -40,7 +40,7 @@ class OffsetRangeRedisTest {
4040

4141
assertEquals(true, offsetPersistence.read(testFile)?.isEmpty)
4242

43-
redisPool.resource.use { it.del(testFile.toString()) }
43+
redisHolder.execute { it.del(testFile.toString()) }
4444

4545
assertNull(offsetPersistence.read(testFile))
4646
}
@@ -74,7 +74,7 @@ class OffsetRangeRedisTest {
7474
rangeFile.add(TopicPartitionOffsetRange.parseFilename("a+0+4+4", lastModified))
7575
}
7676

77-
redisPool.resource.use { redis ->
77+
redisHolder.execute { redis ->
7878
val range = redisOffsetReader.readValue<OffsetRedisPersistence.Companion.RedisOffsetRangeSet>(redis.get(testFile.toString()))
7979
assertEquals(OffsetRedisPersistence.Companion.RedisOffsetRangeSet(listOf(
8080
OffsetRedisPersistence.Companion.RedisOffsetIntervals("a", 0, listOf(

src/integrationTest/java/org/radarbase/output/accounting/RedisRemoteLockManagerTest.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,20 @@ import org.junit.jupiter.api.Test
99
import redis.clients.jedis.JedisPool
1010

1111
internal class RedisRemoteLockManagerTest {
12-
private lateinit var redisPool: JedisPool
12+
private lateinit var redisHolder: RedisHolder
1313
private lateinit var lockManager1: RemoteLockManager
1414
private lateinit var lockManager2: RemoteLockManager
1515

1616
@BeforeEach
1717
fun setUp() {
18-
redisPool = JedisPool()
19-
lockManager1 = RedisRemoteLockManager(redisPool, "locks")
20-
lockManager2 = RedisRemoteLockManager(redisPool, "locks")
18+
redisHolder = RedisHolder(JedisPool())
19+
lockManager1 = RedisRemoteLockManager(redisHolder, "locks")
20+
lockManager2 = RedisRemoteLockManager(redisHolder, "locks")
2121
}
2222

2323
@AfterEach
2424
fun tearDown() {
25-
redisPool.close()
25+
redisHolder.close()
2626
}
2727

2828
@Test

0 commit comments

Comments
 (0)