[NO ISSUE][HYR][NET] Bound the wait for an IPC handle to connect

- user model changes: no
- storage format changes: no
- interface changes: no

Details:
- IPCHandle.waitTillConnected() waited on the monitor with no deadline,
  as its own TODO noted. A handle which never reached CONNECTED or
  CLOSED therefore parked its caller forever, and the maxRetries loop in
  IPCConnectionManager.getIPCHandle() - which exists precisely to
  recover from a failed connect - was unreachable
- take a timeout, and on expiry mark the handle CLOSED and return false,
  which is what getIPCHandle() already interprets as a failed connection
- default 120s, overridable with hyracks.ipc.connect.timeout.sec. It
  must stay above the SSL handshake deadline (60s by default) so that a
  handshake still legitimately in progress is not abandoned here
- a connect that completes after the waiter has given up must not
  resurrect the CLOSED handle into a live connection nobody references:
  connectionEstablished() now transitions the handle only if it is not
  already closed, and otherwise discards the late connection and closes
  its channel
- this is a backstop. With the SSL handshake now bounded, a stalled
  handshake fails and closes its channel on its own; this covers the
  non-SSL stalls and anything else that leaves a handle untransitioned

Ext-ref: MB-73310
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Change-Id: I1199e4e8b08eb6abf1649142c8efa7dd00600e27
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/21547
Reviewed-by: Michael Blow <mblow@apache.org>
Reviewed-by: Ali Alsuliman <ali.al.solaiman@gmail.com>
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
2 files changed
tree: 0599fec53860f3988a81a5613429548941cd14dd
  1. asterixdb/
  2. hyracks-fullstack/
  3. .gitattributes
  4. .gitignore
  5. build.xml
  6. pom.xml
  7. README.md
README.md

What is AsterixDB?

AsterixDB is a BDMS (Big Data Management System) with a rich feature set that sets it apart from other Big Data platforms. Its feature set makes it well-suited to modern needs such as web data warehousing and social data storage and analysis. AsterixDB has:

  • Data model
    A semistructured NoSQL style data model (ADM) resulting from extending JSON with object database ideas

  • Query languages
    An expressive and declarative query language (SQL++ that supports a broad range of queries and analysis over semistructured data

  • Scalability
    A parallel runtime query execution engine, Apache Hyracks, that has been scale-tested on up to 1000+ cores and 500+ disks

  • Native storage
    Partitioned LSM-based data storage and indexing to support efficient ingestion and management of semistructured data

  • External storage
    Support for query access to externally stored data (e.g., data in HDFS) as well as to data stored natively by AsterixDB

  • Data types
    A rich set of primitive data types, including spatial and temporal data in addition to integer, floating point, and textual data

  • Indexing
    Secondary indexing options that include B+ trees, R trees, and inverted keyword (exact and fuzzy) index types

  • Transactions
    Basic transactional (concurrency and recovery) capabilities akin to those of a NoSQL store

Learn more about AsterixDB at its website.

Build from source

To build AsterixDB from source, you should have a platform with the following:

  • A Unix-ish environment (Linux, OS X, will all do).
  • git
  • Maven 3.3.9 or newer.
  • JDK 11 or newer.
  • Python 3.6+ with pip and venv

Instructions for building the master:

  • Checkout AsterixDB master:

      $git clone https://github.com/apache/asterixdb.git
    
  • Build AsterixDB master:

      $cd asterixdb
      $mvn clean package -DskipTests
    

Run the build on your machine

Here are steps to get AsterixDB running on your local machine:

  • Start a single-machine AsterixDB instance:

      $cd asterixdb/asterix-server/target/asterix-server-*-binary-assembly/apache-asterixdb-*-SNAPSHOT
      $./opt/local/bin/start-sample-cluster.sh
    
  • Good to go and run queries in your browser at:

      http://localhost:19006
    
  • Read more documentation to learn the data model, query language, and how to create a cluster instance.

Documentation

To generate the documentation, run asterix-doc with the generate.rr profile in maven, e.g mvn -Pgenerate.rr ... Be sure to run mvn package beforehand or run mvn site in asterix-lang-sqlpp to generate some resources that are used in the documentation that are generated directly from the grammar.

Community support