Skip to content

Commit 97eff26

Browse files
committed
Add Proxy Site cache support for provider PathDB instance
1 parent 60d5e5e commit 97eff26

File tree

5 files changed

+167
-11
lines changed

5 files changed

+167
-11
lines changed

filers/default/pom.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,5 +52,14 @@
5252
<groupId>org.commonjava.indy</groupId>
5353
<artifactId>indy-subsys-metrics</artifactId>
5454
</dependency>
55+
<dependency>
56+
<groupId>org.commonjava.indy</groupId>
57+
<artifactId>indy-subsys-jaxrs</artifactId>
58+
</dependency>
59+
<dependency>
60+
<groupId>io.swagger</groupId>
61+
<artifactId>swagger-annotations</artifactId>
62+
<scope>compile</scope>
63+
</dependency>
5564
</dependencies>
5665
</project>

filers/default/src/main/java/org/commonjava/indy/filer/def/DefaultGalleyStorageProvider.java

Lines changed: 48 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,13 @@
2323
import org.commonjava.indy.content.IndyChecksumAdvisor;
2424
import org.commonjava.indy.content.SpecialPathSetProducer;
2525
import org.commonjava.indy.filer.def.conf.DefaultStorageProviderConfiguration;
26-
import org.commonjava.maven.galley.cache.pathmapped.PathMappedCacheProviderConfig;
27-
import org.commonjava.o11yphant.metrics.api.Meter;
28-
import org.commonjava.o11yphant.metrics.api.MetricRegistry;
29-
import org.commonjava.o11yphant.metrics.api.Timer;
30-
import org.commonjava.o11yphant.metrics.DefaultMetricsManager;
31-
import org.commonjava.indy.subsys.metrics.conf.IndyMetricsConfig;
3226
import org.commonjava.indy.subsys.cassandra.CassandraClient;
3327
import org.commonjava.indy.subsys.cassandra.config.CassandraConfig;
28+
import org.commonjava.indy.subsys.metrics.conf.IndyMetricsConfig;
3429
import org.commonjava.maven.galley.GalleyInitException;
3530
import org.commonjava.maven.galley.cache.CacheProviderFactory;
3631
import org.commonjava.maven.galley.cache.partyline.PartyLineCacheProviderFactory;
32+
import org.commonjava.maven.galley.cache.pathmapped.PathMappedCacheProviderConfig;
3733
import org.commonjava.maven.galley.cache.pathmapped.PathMappedCacheProviderFactory;
3834
import org.commonjava.maven.galley.config.TransportManagerConfig;
3935
import org.commonjava.maven.galley.io.ChecksummingTransferDecorator;
@@ -54,10 +50,14 @@
5450
import org.commonjava.maven.galley.spi.io.TransferDecorator;
5551
import org.commonjava.maven.galley.spi.metrics.TimingProvider;
5652
import org.commonjava.maven.galley.transport.htcli.UploadMetadataGenTransferDecorator;
53+
import org.commonjava.o11yphant.metrics.DefaultMetricsManager;
54+
import org.commonjava.o11yphant.metrics.api.Meter;
55+
import org.commonjava.o11yphant.metrics.api.MetricRegistry;
56+
import org.commonjava.o11yphant.metrics.api.Timer;
5757
import org.commonjava.storage.pathmapped.config.DefaultPathMappedStorageConfig;
5858
import org.commonjava.storage.pathmapped.config.PathMappedStorageConfig;
59-
import org.commonjava.storage.pathmapped.pathdb.datastax.CassandraPathDB;
6059
import org.commonjava.storage.pathmapped.metrics.MeasuredPathDB;
60+
import org.commonjava.storage.pathmapped.pathdb.datastax.CassandraPathDB;
6161
import org.commonjava.storage.pathmapped.spi.PathDB;
6262
import org.commonjava.storage.pathmapped.spi.PhysicalStore;
6363
import org.slf4j.Logger;
@@ -75,17 +75,23 @@
7575
import java.util.List;
7676
import java.util.Map;
7777
import java.util.Optional;
78+
import java.util.Set;
7879
import java.util.concurrent.ExecutorService;
7980
import java.util.concurrent.Executors;
8081
import java.util.concurrent.ScheduledExecutorService;
8182
import java.util.function.BiConsumer;
8283
import java.util.function.Function;
8384

8485
import static org.apache.commons.lang3.StringUtils.isBlank;
85-
import static org.commonjava.o11yphant.metrics.util.NameUtils.getSupername;
8686
import static org.commonjava.maven.galley.io.checksum.ChecksummingDecoratorAdvisor.ChecksumAdvice.CALCULATE_AND_WRITE;
8787
import static org.commonjava.maven.galley.io.checksum.ChecksummingDecoratorAdvisor.ChecksumAdvice.NO_DECORATE;
88-
import static org.commonjava.storage.pathmapped.pathdb.datastax.util.CassandraPathDBUtils.*;
88+
import static org.commonjava.o11yphant.metrics.util.NameUtils.getSupername;
89+
import static org.commonjava.storage.pathmapped.pathdb.datastax.util.CassandraPathDBUtils.PROP_CASSANDRA_HOST;
90+
import static org.commonjava.storage.pathmapped.pathdb.datastax.util.CassandraPathDBUtils.PROP_CASSANDRA_KEYSPACE;
91+
import static org.commonjava.storage.pathmapped.pathdb.datastax.util.CassandraPathDBUtils.PROP_CASSANDRA_PASS;
92+
import static org.commonjava.storage.pathmapped.pathdb.datastax.util.CassandraPathDBUtils.PROP_CASSANDRA_PORT;
93+
import static org.commonjava.storage.pathmapped.pathdb.datastax.util.CassandraPathDBUtils.PROP_CASSANDRA_REPLICATION_FACTOR;
94+
import static org.commonjava.storage.pathmapped.pathdb.datastax.util.CassandraPathDBUtils.PROP_CASSANDRA_USER;
8995

9096
@SuppressWarnings( "unused" )
9197
@ApplicationScoped
@@ -148,6 +154,8 @@ public class DefaultGalleyStorageProvider
148154

149155
private CacheProviderFactory cacheProviderFactory;
150156

157+
PathDB pathDB = null;
158+
151159
public DefaultGalleyStorageProvider()
152160
{
153161
}
@@ -205,7 +213,6 @@ private void setupCacheProviderFactory()
205213

206214
logger.info( "Initializing Cassandra-based path-mapping database for content storage." );
207215

208-
PathDB pathDB = null;
209216
PathMappedStorageConfig pathMappedStorageConfig = getPathMappedStorageConfig();
210217
if ( cassandraClient != null )
211218
{
@@ -411,4 +418,35 @@ public synchronized CacheProvider getCacheProvider()
411418

412419
return cacheProvider;
413420
}
421+
422+
public Set<String> getProxySitesCache()
423+
{
424+
return pathDB.getProxySitesCache();
425+
}
426+
427+
public List<String> getProxySiteList()
428+
{
429+
return pathDB.getProxySiteList();
430+
}
431+
432+
public boolean isProxySite( String site )
433+
{
434+
return pathDB.isProxySite( site );
435+
}
436+
437+
public void saveProxySite( String site )
438+
{
439+
pathDB.saveProxySite( site );
440+
}
441+
442+
public void deleteProxySite( String site )
443+
{
444+
pathDB.deleteProxySite( site );
445+
}
446+
447+
public void deleteAllProxySite()
448+
{
449+
pathDB.deleteAllProxySite();
450+
}
451+
414452
}
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package org.commonjava.indy.filer.def.jaxrs;
2+
3+
import io.swagger.annotations.Api;
4+
import io.swagger.annotations.ApiOperation;
5+
import io.swagger.annotations.ApiResponse;
6+
import io.swagger.annotations.ApiResponses;
7+
import org.commonjava.indy.bind.jaxrs.IndyResources;
8+
import org.commonjava.indy.bind.jaxrs.util.REST;
9+
import org.commonjava.indy.filer.def.DefaultGalleyStorageProvider;
10+
import org.slf4j.Logger;
11+
import org.slf4j.LoggerFactory;
12+
13+
import javax.enterprise.context.ApplicationScoped;
14+
import javax.inject.Inject;
15+
import javax.servlet.http.HttpServletRequest;
16+
import javax.ws.rs.DELETE;
17+
import javax.ws.rs.GET;
18+
import javax.ws.rs.PUT;
19+
import javax.ws.rs.Path;
20+
import javax.ws.rs.PathParam;
21+
import javax.ws.rs.Produces;
22+
import javax.ws.rs.core.Context;
23+
import javax.ws.rs.core.Response;
24+
import javax.ws.rs.core.StreamingOutput;
25+
import javax.ws.rs.core.UriInfo;
26+
import java.util.List;
27+
import java.util.Set;
28+
29+
@Api( value = "Proxy Site Cache Access and Storage" )
30+
@Path( "/api/proxysite" )
31+
@ApplicationScoped
32+
@REST
33+
public class ProxySiteAccessResource
34+
implements IndyResources
35+
{
36+
protected final Logger logger = LoggerFactory.getLogger( getClass() );
37+
38+
@Inject
39+
DefaultGalleyStorageProvider provider;
40+
41+
@ApiOperation( "Retrieve All Proxy Sites." )
42+
@ApiResponses( { @ApiResponse( code = 404, message = "Site is not available" ),
43+
@ApiResponse( code = 200, response = StreamingOutput.class, message = "Site stream" ), } )
44+
@Produces( "application/json" )
45+
@Path( "/all" )
46+
@GET
47+
public Response doGet( @Context final UriInfo uriInfo, @Context final HttpServletRequest request )
48+
{
49+
Set<String> cache = provider.getProxySitesCache();
50+
logger.info( "Proxy Site Cache list: {}", cache );
51+
List<String> result = provider.getProxySiteList();
52+
return ( result == null || result.isEmpty() ) ?
53+
Response.status( Response.Status.NOT_FOUND ).build() :
54+
Response.ok( result ).build();
55+
}
56+
57+
@ApiOperation( "Store Proxy Site." )
58+
@ApiResponses( { @ApiResponse( code = 201, message = "Site was stored successfully" ) } )
59+
@PUT
60+
@Path( "/{site}" )
61+
public Response doCreate( @PathParam( "site" ) final String site, @Context final HttpServletRequest request,
62+
@Context final UriInfo uriInfo )
63+
{
64+
provider.saveProxySite( site );
65+
return Response.created( uriInfo.getRequestUri() ).build();
66+
}
67+
68+
@ApiOperation( "Delete Proxy Site." )
69+
@ApiResponse( code = 200, message = "Delete complete." )
70+
@Path( "/{site}" )
71+
@DELETE
72+
public Response doDelete( @PathParam( "site" ) final String site )
73+
{
74+
provider.deleteProxySite( site );
75+
provider.getProxySitesCache().remove( site );
76+
return Response.ok().build();
77+
}
78+
79+
@ApiOperation( "Delete All Proxy Sites." )
80+
@ApiResponse( code = 200, message = "Delete complete." )
81+
@Path( "/all" )
82+
@DELETE
83+
public Response doDeleteAll()
84+
{
85+
provider.deleteAllProxySite();
86+
provider.getProxySitesCache().clear();
87+
return Response.ok().build();
88+
}
89+
90+
}

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@
9494
<indyModelVersion>1.5</indyModelVersion>
9595
<indyClientVersion>3.4.0</indyClientVersion>
9696
<atlasVersion>1.1.4</atlasVersion>
97-
<galleyVersion>1.17</galleyVersion>
97+
<galleyVersion>1.18-SNAPSHOT</galleyVersion>
9898
<weftVersion>1.24</weftVersion>
9999
<webdavVersion>3.2.1</webdavVersion>
100100
<!-- TODO: partyline is still needed for standalone mode, may be removed in future -->

test/fixtures-core/src/main/java/org/commonjava/indy/test/fixture/core/TestCacheProvider.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import java.io.IOException;
3232
import java.io.InputStream;
3333
import java.io.OutputStream;
34+
import java.util.Set;
3435

3536
public class TestCacheProvider
3637
implements CacheProvider
@@ -299,4 +300,22 @@ public void stopReporting()
299300
{
300301
lockingSupport.stopReporting();
301302
}
303+
304+
@Override
305+
public Set<String> getProxySitesCache()
306+
{
307+
return null;
308+
}
309+
310+
@Override
311+
public boolean isProxySite( String s )
312+
{
313+
return false;
314+
}
315+
316+
@Override
317+
public void saveProxySite( String s )
318+
{
319+
320+
}
302321
}

0 commit comments

Comments
 (0)