hawq-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From benchristel <...@git.apache.org>
Subject [GitHub] incubator-hawq pull request #1379: HAWQ-1622. Cache PXF proxy UGI so that cl...
Date Sat, 07 Jul 2018 01:04:05 GMT
Github user benchristel commented on a diff in the pull request:

    https://github.com/apache/incubator-hawq/pull/1379#discussion_r200793393
  
    --- Diff: pxf/pxf-service/src/main/java/org/apache/hawq/pxf/service/TimedProxyUGI.java
---
    @@ -0,0 +1,93 @@
    +package org.apache.hawq.pxf.service;
    +
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one
    + * or more contributor license agreements.  See the NOTICE file
    + * distributed with this work for additional information
    + * regarding copyright ownership.  The ASF licenses this file
    + * to you under the Apache License, Version 2.0 (the
    + * "License"); you may not use this file except in compliance
    + * with the License.  You may obtain a copy of the License at
    + *
    + *   http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing,
    + * software distributed under the License is distributed on an
    + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    + * KIND, either express or implied.  See the License for the
    + * specific language governing permissions and limitations
    + * under the License.
    + */
    +
    +import java.util.concurrent.atomic.AtomicInteger;
    +import java.util.concurrent.Delayed;
    +import java.util.concurrent.TimeUnit;
    +
    +import org.apache.hadoop.security.UserGroupInformation;
    +
    +public class TimedProxyUGI implements Delayed {
    +
    +    private volatile long startTime;
    +    private UserGroupInformation proxyUGI;
    +    private SegmentTransactionId session;
    +    private boolean cleaned = false;
    +    AtomicInteger inProgress = new AtomicInteger();
    +
    +    public TimedProxyUGI(UserGroupInformation proxyUGI, SegmentTransactionId session)
{
    +        this.startTime = System.currentTimeMillis();
    +        this.proxyUGI = proxyUGI;
    +        this.session = session;
    +    }
    +
    +    public UserGroupInformation getProxyUGI() {
    +        return proxyUGI;
    +    }
    +
    +    public SegmentTransactionId getSession() {
    +        return session;
    +    }
    +
    +    public boolean isCleaned() {
    +        return cleaned;
    +    }
    +
    +    public void setCleaned() {
    +        cleaned = true;
    +    }
    +
    +    public int getCounter() {
    +        return inProgress.get();
    +    }
    +
    +    public void incrementCounter() {
    +        inProgress.incrementAndGet();
    +    }
    +
    +    public void decrementCounter() {
    +        inProgress.decrementAndGet();
    +    }
    +
    +    public void resetTime() {
    +        startTime = System.currentTimeMillis();
    +    }
    +
    +    public void setExpired() {
    +        startTime = -1L;
    +    }
    +
    +    @Override
    +    public long getDelay(TimeUnit unit) {
    +        return unit.convert(getDelayMillis(), TimeUnit.MILLISECONDS);
    +    }
    +
    +    @Override
    +    public int compareTo(Delayed other) {
    +        TimedProxyUGI that = (TimedProxyUGI) other;
    +        return Long.compare(this.getDelayMillis(), that.getDelayMillis());
    +    }
    +
    +    public long getDelayMillis() {
    +        return (startTime + UGICache.UGI_CACHE_EXPIRY) - System.currentTimeMillis();
    --- End diff --
    
    It's a little strange that we're referencing `UGI_CACHE_EXPIRY` directly hereā€”it hints
at a tight coupling between this class and the `UGICache` that isn't explicit elsewhere, and
also creates a dependency cycle between these two classes. That may be fine if we want to
let these classes be coupled, but if so I'd want to make the coupling even more explicit,
e.g. by making this class a public static inner class of `UGICache`. If we want to decouple
them, we could instead pass the expiry time to the constructor of `TimedProxyUGI`.


---

Mime
View raw message