Example usage for java.util.concurrent.atomic AtomicReference get

List of usage examples for java.util.concurrent.atomic AtomicReference get

Introduction

In this page you can find the example usage for java.util.concurrent.atomic AtomicReference get.

Prototype

public final V get() 

Source Link

Document

Returns the current value, with memory effects as specified by VarHandle#getVolatile .

Usage

From source file:de.codesourcery.jasm16.parser.InstructionNodeTest.java

public void testParseNestedImmediateExpression() throws Exception {

    final String source = "SET I, 4+5*3";

    final ICompilationUnit unit = CompilationUnit.createInstance("string input", source);

    final IParseContext context = createParseContext(source);

    final ASTNode result = new InstructionNode().parse(context);
    assertFalse(getErrors(source, result), result.hasErrors());
    assertEquals(InstructionNode.class, result.getClass());

    final InstructionNode instruction = (InstructionNode) result;

    final AtomicReference<byte[]> objcode = new AtomicReference<byte[]>();

    final IObjectCodeWriter writer = new IObjectCodeWriter() {

        @Override/* ww w .j  a  va2 s  .com*/
        public void close() throws IOException {
        }

        @Override
        public void writeObjectCode(byte[] data, int offset, int length) throws IOException {
            objcode.set(ArrayUtils.subarray(data, offset, offset + length));
        }

        @Override
        public void writeObjectCode(byte[] data) throws IOException {
            writeObjectCode(data, 0, data.length);
        }

        @Override
        public void deleteOutput() throws IOException {
            // TODO Auto-generated method stub

        }

        @Override
        public Address getCurrentWriteOffset() {
            return Address.ZERO;
        }

        @Override
        public Address getFirstWriteOffset() {
            return Address.ZERO;
        }

        @Override
        public void advanceToWriteOffset(Address offset) throws IOException {
            throw new UnsupportedOperationException("Not implemented");
        }
    };

    final ICompilationContext compContext = createCompilationContext(unit);

    final OperandNode operand = instruction.getOperand(1);
    final TermNode oldExpression = (TermNode) operand.child(0);
    final TermNode newExpression = oldExpression.reduce(compContext);
    if (newExpression != oldExpression) {
        operand.setChild(0, newExpression);
    }
    instruction.symbolsResolved(compContext);
    instruction.writeObjectCode(writer, compContext);
    assertNotNull(objcode.get());
    assertEquals(source, toSourceCode(result, source));
}

From source file:org.apache.bookkeeper.client.MetadataUpdateLoopTest.java

/**
 * Test that if we have two conflicting updates, only one of the loops will complete.
 * The other will throw an exception./*from ww w . j  a v  a  2  s  . c o  m*/
 */
@Test
public void testNewestValueCannotBeUsedAfterReadBack() throws Exception {
    try (BlockableMockLedgerManager lm = spy(new BlockableMockLedgerManager())) {
        lm.blockWrites();

        long ledgerId = 1234L;
        BookieSocketAddress b0 = new BookieSocketAddress("0.0.0.0:3181");
        BookieSocketAddress b1 = new BookieSocketAddress("0.0.0.1:3181");

        LedgerMetadata initMeta = LedgerMetadataBuilder.create().withEnsembleSize(1)
                .withDigestType(DigestType.CRC32C).withPassword(new byte[0]).withWriteQuorumSize(1)
                .withAckQuorumSize(1).newEnsembleEntry(0L, Lists.newArrayList(b0)).build();
        Versioned<LedgerMetadata> writtenMetadata = lm.createLedgerMetadata(ledgerId, initMeta).get();

        AtomicReference<Versioned<LedgerMetadata>> reference = new AtomicReference<>(writtenMetadata);
        CompletableFuture<Versioned<LedgerMetadata>> loop1 = new MetadataUpdateLoop(lm, ledgerId,
                reference::get, (currentMetadata) -> !currentMetadata.isClosed(), (currentMetadata) -> {
                    return LedgerMetadataBuilder.from(currentMetadata).withClosedState().withLastEntryId(10L)
                            .withLength(100L).build();
                }, reference::compareAndSet).run();
        CompletableFuture<Versioned<LedgerMetadata>> loop2 = new MetadataUpdateLoop(lm, ledgerId,
                reference::get, (currentMetadata) -> {
                    if (currentMetadata.isClosed()) {
                        throw new BKException.BKLedgerClosedException();
                    } else {
                        return currentMetadata.getEnsembleAt(0L).contains(b0);
                    }
                }, (currentMetadata) -> {
                    List<BookieSocketAddress> ensemble = Lists.newArrayList(currentMetadata.getEnsembleAt(0L));
                    ensemble.set(0, b1);
                    return LedgerMetadataBuilder.from(currentMetadata).replaceEnsembleEntry(0L, ensemble)
                            .build();
                }, reference::compareAndSet).run();
        lm.releaseWrites();

        Versioned<LedgerMetadata> l1meta = loop1.get();
        try {
            loop2.get();
            Assert.fail("Update loop should have failed");
        } catch (ExecutionException ee) {
            Assert.assertEquals(ee.getCause().getClass(), BKException.BKLedgerClosedException.class);
        }
        Assert.assertEquals(l1meta, reference.get());
        Assert.assertEquals(l1meta.getValue().getEnsembleAt(0L).get(0), b0);
        Assert.assertTrue(l1meta.getValue().isClosed());

        verify(lm, times(2)).writeLedgerMetadata(anyLong(), any(), any());
    }
}

From source file:de.hybris.platform.test.HJMPOptimisticConcurrencyPerformanceTest.java

private void doTestMissingUpdateProblem() throws JaloBusinessException, InterruptedException {
    final Media m = MediaManager.getInstance().createMedia("codeBefore");
    try {//  ww w  .  j  a va2 s.  c om
        m.setMime("mimeBefore");
        m.setDescription("descriptionBefore");

        final CyclicBarrier txStartJoinPoint = new CyclicBarrier(2);
        final AtomicReference<Throwable> tx1Error = new AtomicReference<Throwable>();
        final AtomicReference<Throwable> tx2Error = new AtomicReference<Throwable>();

        final Thread[] threads = createTxThreads(//
                new TxRunnable() {
                    @Override
                    public void run() throws Exception {
                        txStartJoinPoint.await(10, TimeUnit.SECONDS); // wait for other tx to begin
                        assertEquals("codeBefore", m.getCode());
                        txStartJoinPoint.await(10, TimeUnit.SECONDS); // wait for other tx to have read same version
                        m.setMime("tx1Mime");
                        m.setCode("tx1Code");
                    }
                }, //
                new TxRunnable() {
                    @Override
                    public void run() throws Exception {
                        txStartJoinPoint.await(10, TimeUnit.SECONDS); // wait for other tx
                        assertEquals("codeBefore", m.getCode());
                        txStartJoinPoint.await(10, TimeUnit.SECONDS); // wait for other tx to have read same version
                        m.setMime("tx2Mime");
                        m.setDescription("tx2Description");
                    }
                }, tx1Error, tx2Error);

        threads[0].start();
        threads[1].start();

        threads[0].join(50 * 1000);
        threads[1].join(50 * 1000);

        assertFalse(threads[0].isAlive());
        assertFalse(threads[1].isAlive());

        if (isConcurrentModificationCheckEnabled()) {
            assertEquals("missing update from tx1", "tx1Code", m.getCode());
            assertEquals("missing update from tx1", "tx1Mime", m.getMime());
            assertEquals("unexpected update from tx2", "descriptionBefore", m.getDescription());
            assertNull("unexpected error from tx1", tx1Error.get());
            assertNotNull("expected error from tx2", tx2Error.get());
        } else {
            assertNull("unexpected error from tx1", tx1Error.get());
            assertNull("unexpected error from tx2", tx2Error.get());
            assertEquals("missing update from tx1", "tx1Code", m.getCode());
            assertEquals("missing update from tx2", "tx2Description", m.getDescription());
            assertEquals("missing update from tx2", "tx2Mime", m.getMime());
        }
    } finally {
        m.remove();
    }
}

From source file:io.undertow.server.handlers.sse.ServerSentEventTestCase.java

@Test
public void testProgressiveSSEWithCompression() throws IOException {
    final AtomicReference<ServerSentEventConnection> connectionReference = new AtomicReference<>();
    DecompressingHttpClient client = new DecompressingHttpClient(new TestHttpClient());
    try {/*from ww  w .j  a  v a 2 s .c o m*/

        DefaultServer.setRootHandler(new EncodingHandler(new ContentEncodingRepository()
                .addEncodingHandler("deflate", new DeflateEncodingProvider(), 50))
                        .setNext(new ServerSentEventHandler(new ServerSentEventConnectionCallback() {
                            @Override
                            public void connected(ServerSentEventConnection connection, String lastEventId) {
                                connectionReference.set(connection);
                                connection.send("msg 1", new ServerSentEventConnection.EventCallback() {
                                    @Override
                                    public void done(ServerSentEventConnection connection, String data,
                                            String event, String id) {

                                    }

                                    @Override
                                    public void failed(ServerSentEventConnection connection, String data,
                                            String event, String id, IOException e) {
                                        e.printStackTrace();
                                        IoUtils.safeClose(connection);
                                    }
                                });
                            }
                        })));

        HttpGet get = new HttpGet(DefaultServer.getDefaultServerURL() + "/");
        HttpResponse result = client.execute(get);
        Assert.assertEquals(StatusCodes.OK, result.getStatusLine().getStatusCode());
        InputStream stream = result.getEntity().getContent();
        assertData(stream, "data:msg 1\n\n");
        connectionReference.get().send("msg 2");
        assertData(stream, "data:msg 2\n\n");
        connectionReference.get().close();
    } finally {
        client.getConnectionManager().shutdown();
    }
}

From source file:com.igormaznitsa.jhexed.swing.editor.ui.MainForm.java

@Override
public HexLayer makeHexLayer(final String name, final String comment) {
    if (name == null) {
        throw new NullPointerException("Name must not be null");
    }//from   w w w  .  j  a v a 2s .co m
    if (comment == null) {
        throw new NullPointerException("Comments must not be null");
    }

    final AtomicReference<HexLayer> result = new AtomicReference<HexLayer>();

    final Runnable run = new Runnable() {
        @Override
        public void run() {
            result.set(layers.addLayer(layers.makeNewLayerField(name, comment)));
        }
    };

    if (SwingUtilities.isEventDispatchThread()) {
        run.run();
    } else {
        try {
            SwingUtilities.invokeAndWait(run);
        } catch (Exception ex) {
            throw new RuntimeException(ex);
        }
    }
    return result.get();
}

From source file:com.microsoft.tfs.core.clients.versioncontrol.internal.WebServiceLayerLocalWorkspaces.java

@Override
public GetOperation[] merge(final String workspaceName, final String workspaceOwner, final ItemSpec source,
        final ItemSpec target, final VersionSpec from, final VersionSpec to, final LockLevel lockLevel,
        final MergeFlags mergeFlags, final AtomicReference<Failure[]> failures,
        final AtomicReference<Conflict[]> conflicts, final String[] itemAttributeFilters,
        final String[] itemPropertyFilters, final AtomicReference<ChangePendedFlags> changePendedFlags) {
    final Workspace w = reconcileIfLocal(workspaceName, workspaceOwner);
    reconcileIfLocalVersionSpec(from, true);
    reconcileIfLocalVersionSpec(to, true);

    final WorkspaceLock lock = lockIfLocal(w);

    try {//from w w  w . java 2s . c  o m
        final GetOperation[] toReturn = super.merge(workspaceName, workspaceOwner, source, target, from, to,
                lockLevel, mergeFlags, failures, conflicts, itemAttributeFilters, itemPropertyFilters,
                changePendedFlags);

        syncWorkingFoldersIfNecessary(w, changePendedFlags.get());
        syncPendingChangesIfLocal(w, toReturn, itemPropertyFilters);

        return toReturn;
    } finally {
        if (lock != null) {
            lock.close();
        }
    }
}

From source file:com.hardincoding.sonar.subsonic.service.SubsonicMusicService.java

private HttpResponse executeWithRetry(Context context, String url, String originalUrl, HttpParams requestParams,
        List<String> parameterNames, List<Object> parameterValues, List<Header> headers,
        ProgressListener progressListener, CancellableTask task) throws IOException {
    Log.i(TAG, "Using URL " + url);

    final AtomicReference<Boolean> cancelled = new AtomicReference<Boolean>(false);
    int attempts = 0;
    while (true) {
        attempts++;/*from   w  w w  .  ja  v a  2s  .c  o m*/
        HttpContext httpContext = new BasicHttpContext();
        final HttpPost request = new HttpPost(url);

        if (task != null) {
            // Attempt to abort the HTTP request if the task is cancelled.
            task.setOnCancelListener(new CancellableTask.OnCancelListener() {
                @Override
                public void onCancel() {
                    cancelled.set(true);
                    request.abort();
                }
            });
        }

        if (parameterNames != null) {
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            for (int i = 0; i < parameterNames.size(); i++) {
                params.add(
                        new BasicNameValuePair(parameterNames.get(i), String.valueOf(parameterValues.get(i))));
            }
            request.setEntity(new UrlEncodedFormEntity(params, Util.UTF_8));
        }

        if (requestParams != null) {
            request.setParams(requestParams);
            Log.d(TAG, "Socket read timeout: " + HttpConnectionParams.getSoTimeout(requestParams) + " ms.");
        }

        if (headers != null) {
            for (Header header : headers) {
                request.addHeader(header);
            }
        }

        try {
            HttpResponse response = mHttpClient.execute(request, httpContext);
            detectRedirect(originalUrl, context, httpContext);
            return response;
        } catch (IOException x) {
            request.abort();
            if (attempts >= HTTP_REQUEST_MAX_ATTEMPTS || cancelled.get()) {
                throw x;
            }
            if (progressListener != null) {
                String msg = context.getResources().getString(R.string.music_service_retry, attempts,
                        HTTP_REQUEST_MAX_ATTEMPTS - 1);
                progressListener.updateProgress(msg);
            }
            Log.w(TAG, "Got IOException (" + attempts + "), will retry", x);
            increaseTimeouts(requestParams);
            Util.sleepQuietly(2000L);
        }
    }
}

From source file:com.microsoft.tfs.core.clients.versioncontrol.internal.WebServiceLayerLocalWorkspaces.java

@Override
public Shelveset unshelve(final String shelvesetName, final String shelvesetOwner, final String workspaceName,
        final String workspaceOwner, final ItemSpec[] items, final String[] itemAttributeFilters,
        final String[] itemPropertyFilters, final String[] shelvesetPropertyFilters, final boolean merge,
        final AtomicReference<Failure[]> failures, final AtomicReference<GetOperation[]> getOperations,
        final AtomicReference<Conflict[]> conflicts,
        final AtomicReference<ChangePendedFlags> changePendedFlags) {
    final Workspace w = reconcileIfLocal(workspaceName, workspaceOwner);

    // Lock the workspace which will receive the pending changes
    final WorkspaceLock lock = lockIfLocal(w);

    try {//  w  w w .j  a v  a 2  s. com
        final Shelveset toReturn = super.unshelve(shelvesetName, shelvesetOwner, workspaceName, workspaceOwner,
                items, itemAttributeFilters, itemPropertyFilters, shelvesetPropertyFilters, merge, failures,
                getOperations, conflicts, changePendedFlags);

        syncWorkingFoldersIfNecessary(w, changePendedFlags.get());
        syncPendingChangesIfLocal(w, getOperations.get(), itemPropertyFilters);

        return toReturn;
    } finally {
        if (lock != null) {
            lock.close();
        }
    }
}